[python] 파이썬에서 HTTP PUT을 수행하는 방법이 있습니까

PUT파이썬에서 HTTP 를 사용하여 서버에 일부 데이터를 업로드해야합니다 . urllib2 문서에 대한 간단한 읽기에서 HTTP 만 수행 POST합니다. PUT파이썬 에서 HTTP를 수행하는 방법이 있습니까?



답변

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

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

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

r.status_code

또는 다음과 같은 응답 :

r.content

요청에는 많은 양의 구문 설탕과 단축키가있어 인생을 더 쉽게 만들 수 있습니다.


답변

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의 클라이언트 역할을 할 수 있도록이 문제를 너무 오래 해결해야했습니다. 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)