22

Is there a way to make a request using the PATCH HTTP method in Python?

I tried using httplib, but it doesn't accept PATCH as method param.

6
  • 5
    Did you mean PUT? PUSH is not a valid request method for HTTP Commented Jul 28, 2011 at 1:04
  • Check here, it uses PUT on that post, I guess you can use PUSH as a verb and wont give you trouble, still you should use PUT instead of PUSH Commented Jul 28, 2011 at 1:28
  • Sorry, people, I typed the wrong method name, I edited the question o.O Commented Jul 28, 2011 at 12:42
  • 3
    Cat Plus Plus: yes, there is a PATCH method. dave: PUSH is "valid". There's a difference between "valid" and "registered". Commented Jul 28, 2011 at 12:57
  • Cat Plus Plus: here about PATCH method innoq.com/blog/st/2010/03/rfc_5789_patch_method_for_http.html It's ironic that Google support and use it in APIs but GAE urlfetch doesn't work with it. Commented Jul 28, 2011 at 13:36

4 Answers 4

25

With Requests, making PATCH requests is very simple:

import requests

r = requests.patch('http://httpbin.org/patch')
Sign up to request clarification or add additional context in comments.

3 Comments

How do I log r. Should I just do self.log.info('Response: %s' % r)?
how can i pass string json data into this ?
@PrasaanthNeelakandan over here are better answers Post JSON using Python Requests
16

Seems to work in 2.7.1 as well.

>>> import urllib2
>>> request = urllib2.Request('http://google.com')
>>> request.get_method = lambda: 'PATCH'
>>> resp = urllib2.urlopen(request)
Traceback (most recent call last):
 ...
urllib2.HTTPError: HTTP Error 405: Method Not Allowed

1 Comment

Great information. This is a simple little hack to make urllib2 use PATCH instead of POST. I don't know why PATCH hasn't been implemented as an option yet.
4

I tried this in Python 3, and it seemed to work (but I don't have a server handy that supports the PATCH request type):

>>> import http.client
>>> c = http.client.HTTPConnection("www.google.com")
>>> r = c.request("PATCH", "/index.html")
>>> print(r.status, r.reason)
405 Method Not Allowed

I'm assuming that the HTTP 405 is coming from the server and that it is "not allowed".

By the way, thanks for showing me the cool PATCH method in HTTP.

1 Comment

Thanks for the answer, I will try that later and mark as accepted. GitHub API accepted POST instead of PATCH, but I will give that a try and keep this for future.
2

It is incredibly simple with httplib2:

import httplib2

http = httplib2.Http()
http.request("http://www.google.com", "PATCH", <patch content>)

It supports Python 2.3 or later (including 3.x) and works beautifully!

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.