문제

HTTP를 사용하여 일부 데이터를 서버에 업로드해야 합니다. PUT 파이썬에서.urllib2 문서를 간략하게 읽어본 결과, HTTP만 수행합니다. POST.HTTP를 수행할 수 있는 방법이 있나요? PUT 파이썬으로?

도움이 되었습니까?

해결책

나는 과거에 다양한 Python HTTP 라이브러리를 사용해왔고 '요청사항'내가 가장 좋아하는 것.기존 라이브러리에는 꽤 유용한 인터페이스가 있었지만 간단한 작업을 수행하기에는 코드가 너무 길어질 수 있습니다.요청의 기본 PUT은 다음과 같습니다.

payload = {'username': 'bob', 'email': 'bob@bob.com'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)

그런 다음 다음을 사용하여 응답 상태 코드를 확인할 수 있습니다.

r.status_code

또는 다음과 같은 응답:

r.content

Requests에는 여러분의 삶을 더 쉽게 만들어 줄 많은 구문적 설탕과 지름길이 있습니다.

다른 팁

import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request('http://example.org', data='your_put_data')
request.add_header('Content-Type', 'your/contenttype')
request.get_method = lambda: 'PUT'
url = opener.open(request)

Httplib가 더 깔끔한 선택인 것 같습니다.

import httplib
connection =  httplib.HTTPConnection('1.2.3.4:1234')
body_content = 'BODY CONTENT GOES HERE'
connection.request('PUT', '/url/path/to/put/to', body_content)
result = connection.getresponse()
# Now result.status and result.reason contains interesting stuff

당신은 httplib 모듈.이를 통해 원하는 종류의 HTTP 요청을 할 수 있습니다.

RESTful API의 클라이언트 역할을 하려면 이 문제도 얼마 전에 해결해야 했습니다.나는 GET 및 POST 외에도 PUT 및 DELETE를 보낼 수 있기 때문에 httplib2를 선택했습니다.Httplib2는 표준 라이브러리의 일부가 아니지만 치즈 가게에서 쉽게 구할 수 있습니다.

요청 라이브러리를 사용할 수 있으며, 이는 urllib2 접근 방식을 사용하는 것에 비해 작업을 훨씬 단순화합니다.먼저 pip에서 설치하십시오.

pip install requests

자세한 내용 요청 설치 중.

그런 다음 Put 요청을 설정합니다.

import requests
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

# Create your header as required
headers = {"content-type": "application/json", "Authorization": "<auth-key>" }

r = requests.put(url, data=json.dumps(payload), headers=headers)

참조 요청 라이브러리 빠른 시작.나는 이것이 urllib2보다 훨씬 간단하다고 생각하지만 이 추가 패키지를 설치하고 가져와야 합니다.

이것은 python3에서 더 좋게 만들어졌으며 다음 문서에 문서화되어 있습니다. stdlib 문서

그만큼 urllib.request.Request 수업은 a를 얻었습니다 method=... Python3의 매개변수입니다.

일부 샘플 사용법:

req = urllib.request.Request('https://example.com/', data=b'DATA!', method='PUT')
urllib.request.urlopen(req)

나는 또한 추천한다 httplib2 조 그레가리오 지음.나는 표준 lib에서 httplib 대신 이것을 정기적으로 사용합니다.

살펴 보셨나요? put.py?나는 과거에 그것을 사용했습니다.또한 urllib를 사용하여 자신의 요청을 해킹할 수도 있습니다.

물론 소켓부터 urllib 조정까지 모든 수준에서 기존 표준 라이브러리를 사용하여 직접 만들 수 있습니다.

http://pycurl.sourceforge.net/

"PyCurl은 libcurl에 대한 Python 인터페이스입니다."

"libcurl은 무료이며 사용하기 쉬운 클라이언트측 URL 전송 라이브러리입니다.지원하다 ...HTTP 넣어"

"PycURL의 가장 큰 단점은 멋진 Python 클래스 계층 구조가 전혀 없이 libcurl에 비해 상대적으로 얇은 레이어라는 것입니다.이는 libcurl의 C API에 이미 익숙하지 않은 한 학습 곡선이 다소 가파른 것을 의미합니다."

표준 라이브러리 내에 머물고 싶다면 하위클래스를 만들 수 있습니다. urllib2.Request:

import urllib2

class RequestWithMethod(urllib2.Request):
    def __init__(self, *args, **kwargs):
        self._method = kwargs.pop('method', None)
        urllib2.Request.__init__(self, *args, **kwargs)

    def get_method(self):
        return self._method if self._method else super(RequestWithMethod, self).get_method()


def put_request(url, data):
    opener = urllib2.build_opener(urllib2.HTTPHandler)
    request = RequestWithMethod(url, method='PUT', data=data)
    return opener.open(request)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top