如何在Python中进行PATCH请求?

22

有没有一种方法可以在Python中使用PATCH HTTP方法发出请求?

我尝试使用httplib,但它不接受PATCH作为method参数。


5
你的意思是"PUT"吗?"PUSH"不是HTTP的有效请求方式。 - dave
请查看这里:https://dev59.com/b3VD5IYBdhLWcg3wBm5h,它在该帖子上使用了PUT方法。我猜你可以把PUSH作为动词使用而不会有问题,但是你应该使用PUT而不是PUSH。 - Hassek
抱歉,大家,我输入了错误的方法名称,我已经编辑了问题。 - Ricardo Augusto
3
有 PATCH 方法。PUSH 是“有效”的,但“有效”和“注册”是有区别的。 - Julian Reschke
Cat Plus Plus: 关于PATCH方法的信息请查看此链接http://www.innoq.com/blog/st/2010/03/rfc_5789_patch_method_for_http.html。很讽刺的是,Google在API中支持并使用它,但GAE的urlfetch却无法与其配合使用。 - Ricardo Augusto
salesforce.com的REST API要求使用PATCH方法来更新对象,因此我也在寻找这个方法,以便可以从Google App Engine更新对象。http://www.salesforce.com/us/developer/docs/api_rest/index.htm - Alpha Codemonkey
4个回答

25

使用Requests,发送PATCH请求非常简单:

import requests

r = requests.patch('http://httpbin.org/patch')

1
我该如何记录 r 呢?我只需要这样做吗 self.log.info('Response: %s' % r) - Hussain
我该如何将字符串JSON数据传递到这里? - Ace McCloud
1
@PrasaanthNeelakandan,这里有更好的答案:使用Python Requests发布JSON - No Sssweat

16

看起来在2.7.1中也有效。

>>> 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
很棒的信息。这是一个简单的小技巧,可以让urllib2使用PATCH而不是POST。我不知道为什么还没有将PATCH实现为一个选项。 - Corey O.

4

我在 Python 3 中尝试过,似乎可以工作(但是我手头没有支持 PATCH 请求类型的服务器):

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

我假设收到的 HTTP 405 来自服务器,并且是“不允许”的意思。
顺便说一下,感谢您向我展示了 HTTP 中很酷的 PATCH 方法

谢谢回答,我稍后会尝试并标记为已接受。GitHub API 接受了 POST 而不是 PATCH,但我会尝试并将此保留到未来。 - Ricardo Augusto

2
使用httplib2非常简单:
import httplib2

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

它支持Python 2.3或更高版本(包括3.x),并且运行效果非常好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接