2011-07-28 237 views
14

有没有办法使用Python中的PATCH http方法发出请求?如何在Python中创建PATCH请求?

我试过使用httplib,但它不接受PATCH作为方法参数。

+5

您的意思是PUT? PUSH不是一个有效的HTTP请求方法 – dave

+0

检查[这里](http://stackoverflow.com/questions/111945/is-there-any-way-to-do-http-put-in-python),它使用在这篇文章中,我想你可以使用PUSH作为动词,并且不会给你带来麻烦,你仍然应该使用PUT而不是PUSH – Hassek

+0

对不起,人们,我输入了错误的方法名称,我编辑了问题oO –

回答

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 method

+0

感谢您的回答,我会稍后再尝试并标记为已接受。 GitHub API接受POST而不是PATCH,但我会试一试,并保留这个以备将来。 –

21

随着Requests,使得PATCH requests很简单:

import requests 

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

如何登录'r'。我应该做'self.log.info('Response:%s'%r)'? – Hussain

+0

如何将字符串json数据传递给此? –

+1

@PrasaanthNeelakandan在这里是更好的答案[发布JSON使用Python请求](http://stackoverflow.com/questions/9733638/post-json-using-python-requests#26344315) –

12

似乎在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尚未作为选项实施。 –

2

它与httplib2非常简单:

import httplib2 

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

我已经使用了使用httplib2库自己在一个专业的REST框架,其中包括PATCH支持。它支持Python 2.3或更高版本(包括3.x)并且工作得非常好!