httperror has example ejemplos attribute python json urllib2

has - urllib2 python 3



urllib2 y json (6)

Ejemplo: enviar 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()

¿Alguien puede señalar un tutorial que me muestra cómo hacer una solicitud POST usando urllib2 con los datos en formato JSON?


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)


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 modificada 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()


Lo que sea que urllib esté usando para averiguar Content-Length parece confundirse por json, por lo que debes calcularlo tú 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())


Sin duda, quieres hackear el encabezado para tener una solicitud Ajax adecuada:

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 a json.carga el POST en el lado del servidor.

Editar: por cierto, tienes que urllib.urlencode(mydata_dict) antes de enviarlos. Si no lo hace, el POST no será lo que espera el servidor