Подтвердить что ты не робот

Как сделать метод HTTP DELETE с помощью urllib2?

Поддерживает ли urllib2 метод DELETE или PUT? Если да, укажите любой пример, пожалуйста. Мне нужно использовать API поршней.

4b9b3361

Ответ 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)

(Это похоже на приведенные выше ответы, но показывает использование.)