45 votes

Comment faire la méthode HTTP DELETE en utilisant urllib2 ?

Fait urllib2 supporte la méthode DELETE ou PUT ? Si oui, veuillez fournir un exemple. J'ai besoin d'utiliser l'API de piston.

75voto

Corey Goldberg Points 15625

Vous pouvez le faire avec httplib :

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

également, regardez ceci question . la réponse acceptée montre un moyen d'ajouter d'autres méthodes à 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 votes

C'est vous ! Merci pour les exemples utilisant la surveillance de Windows via wmi en Python, ils m'ont été d'une grande aide :)

1 votes

Joli httplib ne supporte pas l'authentification ?

1 votes

L'authentification avec urllib2 en cas de : request.add_header( 'Authorization', b'Basic ' + 'user:password'.encode('base64').replace('\n','') )

14voto

Dave Points 1274

Correction pour la réponse de 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()

2 votes

Il serait plus court d'utiliser self._method = kwargs.pop('method', None)

2 votes

L'utilisation de super me donne un Erreur de type . A la place, j'ai utilisé urllib2.Request.get_method(self)

8voto

Ali Sadik Kumlali Points 346

J'ai trouvé le code suivant dans https://gist.github.com/kehr/0c282b14bfa35155deff34d3d27f8307 et cela a fonctionné pour moi (Python 2.7.5) :

import urllib2

request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'DELETE'
response = urllib2.urlopen(request)

7voto

Raj Points 955

Vous pouvez sous-classer l'objet urllib2.Request et surcharger la méthode lorsque vous instanciez la classe.

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

Avec l'aimable autorisation de Benjamin Smedberg

1voto

Wilfred Hughes Points 3507

Vous pouvez définir une sous-classe de la Request et l'appeler comme suit :

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)

(Ceci est similaire aux réponses précédentes, mais montre l'usage).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X