Поддерживает ли urllib2
метод DELETE или PUT? Если да, укажите любой пример, пожалуйста. Мне нужно использовать API поршней.
Как сделать метод HTTP DELETE с помощью urllib2?
Ответ 1
вы можете сделать это с помощью httplib:
import httplib
conn = httplib.HTTPConnection('www.foo.com')
conn.request('PUT', '/myurl', body)
resp = conn.getresponse()
content = resp.read()
также проверьте question. принятый ответ показывает способ добавления других методов в urllib2:
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)
Ответ 2
Исправление для ответа Raj:
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()
Ответ 3
Вы можете подклассифицировать объект urllib2.Request и переопределить этот метод при создании экземпляра класса.
import urllib2
class RequestWithMethod(urllib2.Request):
def __init__(self, method, *args, **kwargs):
self._method = method
urllib2.Request.__init__(*args, **kwargs)
def get_method(self):
return self._method
Предоставлено Бенджамин Смедберг
Ответ 4
Вы можете определить подкласс объекта 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)
def delete_request(url):
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = RequestWithMethod(url, method='DELETE')
return opener.open(request)
(Это похоже на приведенные выше ответы, но показывает использование.)
Ответ 5
Нашел следующий код из https://gist.github.com/kehr/0c282b14bfa35155deff34d3d27f8307, и он работал у меня (Python 2.7.5):
import urllib2
request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'DELETE'
response = urllib2.urlopen(request)