답변:
나는 과거에 다양한 파이썬 HTTP 라이브러리를 사용해 왔으며 ' 내가 가장 좋아하는 것으로 요청 '을 정했습니다. 기존 라이브러리에는 꽤 유용한 인터페이스가 있지만 간단한 작업을하기에는 코드가 너무 길어질 수 있습니다. 요청의 기본 PUT은 다음과 같습니다.
payload = {'username': 'bob', 'email': 'bob@bob.com'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
그런 다음 다음을 사용하여 응답 상태 코드를 확인할 수 있습니다.
r.status_code
또는 다음과 같은 응답 :
r.content
요청에는 많은 양의 구문 설탕과 단축키가있어 인생을 더 쉽게 만들 수 있습니다.
json=payload
본문에 데이터가 포함되도록 하려면 매개 변수를 사용하십시오 .
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)
requests
대신 라이브러리 사용을 고려하십시오 .
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의 클라이언트 역할을 할 수 있도록이 문제를 너무 오래 해결해야했습니다. Glib 및 POST 외에도 PUT 및 DELETE를 보낼 수 있기 때문에 httplib2에 정착했습니다. Httplib2는 표준 라이브러리의 일부는 아니지만 치즈 샵에서 쉽게 얻을 수 있습니다.
요청 라이브러리를 사용할 수 있으며 urllib2 접근 방식을 사용하는 것과 비교하여 작업을 단순화합니다. 먼저 pip에서 설치하십시오.
pip install requests
요청 설치에 대한 추가 정보 .
그런 다음 풋 요청을 설정하십시오.
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
클래스는 method=...
python3 에서 매개 변수를 얻었습니다 .
일부 샘플 사용법 :
req = urllib.request.Request('https://example.com/', data=b'DATA!', method='PUT')
urllib.request.urlopen(req)
Joe Gregario의 httplib2 도 추천 합니다. 표준 lib에서 httplib 대신 정기적으로 사용합니다.
물론 소켓에서 urllib 조정에 이르기까지 모든 수준의 기존 표준 라이브러리로 자신을 롤업 할 수 있습니다.
http://pycurl.sourceforge.net/
"PyCurl은 libcurl에 대한 Python 인터페이스입니다."
"libcurl은 무료이며 사용하기 쉬운 클라이언트 측 URL 전송 라이브러리입니다 ... ... HTTP PUT 지원"
"PycURL의 주요 단점은 멋진 파이썬 클래스 계층 구조가없는 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)
이 작업을 수행하는 더 적절한 방법은 다음과 requests
같습니다.
import requests
payload = {'username': 'bob', 'email': 'bob@bob.com'}
try:
response = requests.put(url="http://somedomain.org/endpoint", data=payload)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(e)
raise
HTTP PUT 요청에 오류가있는 경우 예외가 발생합니다.