2011-07-28 28 views
14

¿Hay alguna manera de realizar una solicitud utilizando el método PATCH http en Python?¿Cómo hago una solicitud PATCH en Python?

Intenté usar httplib, pero no acepta PATCH como parámetro del método.

+5

¿Quisces decir PUT? PUSH no es un método de solicitud válido para HTTP – dave

+0

Compruebe [aquí] (http://stackoverflow.com/questions/111945/is-there-any-way-to-do-http-put-in-python), utiliza PON en esa publicación, supongo que puedes usar PUSH como verbo y no te dará problemas, aún así deberías usar PUT en lugar de PUSH – Hassek

+0

Disculpa, gente, tecleé el nombre equivocado del método, edité la pregunta de –

Respuesta

4

He intentado esto en Python 3, y parece que ha funcionado (pero no tengo un servidor útil que soporta el tipo PATCH petición):

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

Estoy asumiendo que el HTTP 405 viene del servidor y que "no está permitido".

Por cierto, gracias por mostrarme el genial PATCH method en HTTP.

+0

Gracias por la respuesta, lo intentaré más tarde y marcaré como aceptado. GitHub API aceptó POST en lugar de PATCH, pero intentaré eso y lo guardaré para el futuro. –

21

Con Requests, haciendo PATCH requests es muy simple:

import requests 

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

¿Cómo puedo registrar 'r'. ¿Debo hacer 'self.log.info ('Respuesta:% s'% r)'? – Hussain

+0

¿cómo puedo pasar datos de json de cadena en esto? –

+1

@PrasaanthNeelakandan aquí son mejores respuestas [Publicar JSON usando Python Requests] (http://stackoverflow.com/questions/9733638/post-json-using-python-requests#26344315) –

12

parece funcionar en 2.7.1 también.

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

Gran información. Este es un pequeño hack simple para hacer que urllib2 use PATCH en lugar de POST. No sé por qué PATCH aún no se ha implementado como una opción. –

2

Es increíblemente sencillo con httplib2:

import httplib2 

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

He usado la biblioteca httplib2 mí mismo en un marco profesional resto que incluye soporte parche. Es compatible con Python 2.3 o posterior (incluyendo 3.x) y funciona muy bien!

Cuestiones relacionadas