51

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

5 Answers 5

77

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) 
Sign up to request clarification or add additional context in comments.

3 Comments

It's you! Thanks for the examples using windows monitoring via wmi in Python, those were a great help for me :)
Nice.. httplib does not support authentication?
authentication with urllib2 in case of: request.add_header( 'Authorization', b'Basic ' + 'user:password'.encode('base64').replace('\n','') )
14

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() 

2 Comments

it would be shorter to use self._method = kwargs.pop('method', None)
The use of super gives me a TypeError. Instead I used urllib2.Request.get_method(self)
12

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) 

1 Comment

So dirty-clean :/
7

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

Comments

1

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.)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.