2011-07-28 13 views
14

Czy istnieje sposób, aby złożyć żądanie za pomocą metody PATCH http w języku Python?Jak utworzyć żądanie PATCH w języku Python?

Próbowałem używać protokołu httplib, ale nie akceptuję parametru PATCH jako metody.

+5

Czy chodzi ci o PUT? PUSH nie jest prawidłową metodą żądania dla HTTP – dave

+0

Sprawdź [tutaj] (http://stackoverflow.com/questions/111945/is-there-any-way-to-do-http-put-in-python), używa PUT na tym poście, myślę, że możesz użyć PUSH jako czasownika i nie sprawi ci kłopotu, nadal powinieneś używać PUT zamiast PUSH – Hassek

+0

Przepraszam, ludzie, wpisałem niewłaściwą nazwę metody, zredagowałem pytanie oO –

Odpowiedz

4

Próbowałem to w Pythonie 3, i wydawało się do pracy (ale nie mam pod ręką serwera, który obsługuje typ PATCH życzenie):

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

jestem przy założeniu, że HTTP 405 nadchodzi z serwera i że jest "niedozwolone".

Przy okazji, dziękuję za pokazanie mi fajnego PATCH method w HTTP.

+0

Dzięki za odpowiedź, postaram się to później i oznaczyć jako zaakceptowany. API GitHub zaakceptował POST zamiast PATCH, ale spróbuję i zatrzymam to na przyszłość. –

21

Z Requests, co PATCH requests jest bardzo prosta:

import requests 

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

Jak zalogować "r". Czy powinienem po prostu zrobić 'self.log.info ('Response:% s'% r)'? – Hussain

+0

jak mogę przekazać dane json string do tego? –

+1

@PrasaanthNeelakandan tutaj są lepsze odpowiedzi [Post JSON przy użyciu Python Wnioski] (http://stackoverflow.com/questions/9733638/post-json-using-python-requests#26344315) –

12

wydaje się działać w 2.7.1, jak również.

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

Świetna informacja. Jest to prosty mały hack, który sprawia, że ​​urllib2 używa PATCH zamiast POST. Nie wiem, dlaczego PATCH nie został jeszcze wdrożony jako opcja. –

2

Jest niezwykle prosty z httplib2:

import httplib2 

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

Użyłem biblioteki httplib2 się w profesjonalnym ramach odpoczynku, który obejmuje wsparcie poprawki. Obsługuje Python 2.3 lub nowszy (w tym 3.x) i działa pięknie!

Powiązane problemy