¿alguien puede indicarme un tutorial que me muestre cómo hacer una solicitud POST usando urllib2 con los datos en formato JSON?urllib2 y json
Respuesta
Ejemplo - el envío de algunos datos codificados como JSON como datos POST:
import json
import urllib2
data = json.dumps([1, 2, 3])
f = urllib2.urlopen(url, data)
response = f.read()
f.close()
Seguramente quiere cortar la cabecera para tener una adecuada Ajax Solicitud:
headers = {'X_REQUESTED_WITH' :'XMLHttpRequest',
'ACCEPT': 'application/json, text/javascript, */*; q=0.01',}
request = urllib2.Request(path, data, headers)
response = urllib2.urlopen(request).read()
Y para json.loads el POST en el lado del servidor.
Editar: Por cierto, usted tiene que urllib.urlencode(mydata_dict)
antes de enviarlos. Si no lo hace, el POST no será lo que espera el servidor
urlencode enviará datos codificados en formato url, no en json. – kolinko
La respuesta de Messa solo funciona si el servidor no se molesta en verificar el encabezado de tipo de contenido. Tendrá que especificar un encabezado de tipo de contenido si quiere que realmente funcione. Aquí está la respuesta de Messa modificado para incluir un encabezado de tipo de contenido:
import json
import urllib2
data = json.dumps([1, 2, 3])
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()
f.close()
Trabajando con python3 y urllib, adicionalmente tuve que codificar mis datos de análisis json para que esto funcione 'data = json.dumps ([1, 2, 3]). Encode (" utf8) '. Ver http: // stackoverflow.com/a/5441022/3757139 – Samuel
Cualquiera que sea urllib está usando para averiguar Content-Length parece confundirse con JSON, así que hay que calcular que usted mismo.
import json
import urllib2
data = json.dumps([1, 2, 3])
clen = len(data)
req = urllib2.Request(url, data, {'Content-Type': 'application/json', 'Content-Length': clen})
f = urllib2.urlopen(req)
response = f.read()
f.close()
Me tomó por siempre para resolver esto, así que espero que ayude a alguien más.
Para leer la respuesta json use json.loads()
. Aquí está la muestra.
import json
import urllib
import urllib2
post_params = {
'foo' : bar
}
params = urllib.urlencode(post_params)
response = urllib2.urlopen(url, params)
json_response = json.loads(response.read())
Esto no envía JSON, solo lo recibe. – tsturzl
Esto es lo que funcionó para mí:
import json
import requests
url = 'http://xxx.com'
payload = {'param': '1', 'data': '2', 'field': '4'}
headers = {'content-type': 'application/json'}
r = requests.post(url, data = json.dumps(payload), headers = headers)
No creo que el paquete de solicitudes sea parte de la biblioteca estándar. –
Aunque el paquete 'requests' no es parte de la lib estándar, se instala fácilmente utilizando pip. Perfecto para quienes trabajan en un entorno virtual. – Will
- 1. Python: Urllib2 y OpenCV
- 2. Python - urllib2 y cookielib
- 3. Interfaz de origen con Python y urllib2
- 4. Python urllib2 HTTPS y proxy autenticación NTLM
- 5. Python urllib2, autenticación HTTP básica y tr.im
- 6. Autenticación de Windows con Python y urllib2
- 7. ¿Son seguros los subprocesos urllib2 y httplib?
- 8. ¿Por qué obtengo urllib2.HTTPError con urllib2 y no hay errores con urllib?
- 9. urllib2 no recupera toda la respuesta HTTP
- 10. urllib2 leído a Unicode
- 11. Python URLLib/URLLib2 POST
- 12. Proxy con urllib2
- 13. urllib2 con cookies
- 14. urllib2 a la cadena
- 15. urllib2 autenticación básica oddites
- 16. pitón urllib2 urlopen respuesta
- 17. Disminución con urllib2
- 18. Python: urllib/urllib2/httplib confusion
- 19. Problema Urllib2 inexplicable entre virtualenv.
- 20. HTTPS inicie sesión con urllib2
- 21. ¿Tiene urllib2.urlopen() caché cosas?
- 22. Python urllib2 autenticación básica Problema
- 23. Python urllib2 Encabezado de respuesta
- 24. Python urllib2 llenado y recuperación de formularios automáticos
- 25. Python urllib y urllib2 no abren URL de localhost?
- 26. Ambos usando cookies y un proxy en Python con urllib2
- 27. Establecer host-header al usar Python y urllib2
- 28. ¿Por qué esta url eleva BadStatusLine con httplib2 y urllib2?
- 29. Almacenamiento en caché en urllib2?
- 30. Python urllib2 con keep alive
Para muchos sistemas, esto no funcionará. Vea la respuesta de Bob Van Zant a continuación. – speedplane