11 ответов:
в прошлом я использовал различные http-библиотеки python, и я остановился на'запросы как мой любимый. Существующие библиотеки имели довольно удобные интерфейсы, но код может оказаться слишком длинным для простых операций. Основной положить в запросы выглядит так:
payload = {'username': 'bob', 'email': '[email protected]'} >>> 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. Я остановился на httplib2, потому что это позволило мне отправить PUT и DELETE в дополнение к GET и POST. 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, но требует установки и импорта этого дополнительного пакета.
и httplib2 Джо Gregario. Я использую это регулярно вместо httplib в стандартной lib.
Это было сделано лучше в python3 и документировано в документация stdlib
The
urllib.request.Requestкласс получил amethod=...параметр в python3.пример использования:
req = urllib.request.Request('https://example.com/', data=b'DATA!', method='PUT') urllib.request.urlopen(req)
вы взглянули на put.py? я использовал его в прошлом. Вы также можете просто взломать свой собственный запрос с urllib.
вы можете, конечно, свернуть свой собственный с существующими стандартными библиотеками на любом уровне от сокетов до настройки urllib.
http://pycurl.sourceforge.net/
" PyCurl - это интерфейс Python для libcurl."
"libcurl-это бесплатная и простая в использовании библиотека передачи URL на стороне клиента ... поддержки... HTTP PUT"
" основным недостатком PycURL является то, что он является относительно тонким слоем над libcurl без какого-либо из этих хороших питонов иерархия классов. Это означает, что у него есть несколько крутая кривая обучения, если вы уже не знакомы с API c libcurl. "
Если вы хотите остаться в стандартной библиотеке, вы можете подкласс
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)
Comments