How to make HTTP DELETE method using urllib2?

前端 未结 5 1055
忘掉有多难
忘掉有多难 2020-12-05 03:49

Does urllib2 support DELETE or PUT method? If yes provide with any example please. I need to use piston API.

相关标签:
5条回答
  • 2020-12-05 04:30

    You can subclass the urllib2.Request object and override the method when you instantiate the class.

    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
    

    Courtesy of Benjamin Smedberg

    0 讨论(0)
  • 2020-12-05 04:31

    Found following code from https://gist.github.com/kehr/0c282b14bfa35155deff34d3d27f8307 and it worked for me (Python 2.7.5):

    import urllib2
    
    request = urllib2.Request(uri, data=data)
    request.get_method = lambda: 'DELETE'
    response = urllib2.urlopen(request)
    
    0 讨论(0)
  • 2020-12-05 04:44

    you can do it with httplib:

    import httplib 
    conn = httplib.HTTPConnection('www.foo.com')
    conn.request('PUT', '/myurl', body) 
    resp = conn.getresponse()
    content = resp.read()
    

    also, check out this question. the accepted answer shows a way to add other methods to 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)
    
    0 讨论(0)
  • 2020-12-05 04:50

    You can define a subclass of the Request object, and call it as follows:

    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)
    

    (This is similar to the above answers, but shows usage.)

    0 讨论(0)
  • 2020-12-05 04:54

    Correction for Raj's answer:

    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()
    
    0 讨论(0)
提交回复
热议问题