2011-07-28 160 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)並且工作得非常好!