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