Python envía solicitudes http y recibe respuestas http a través de métodos get y post
El ejemplo de este artículo describe cómo Python envía solicitudes http y recibe respuestas http a través de los métodos get y post. Compártelo con todos para tu referencia.
Los detalles son los siguientes:
El CGI utilizado para las pruebas se llama test.py y se coloca en el directorio cgi-bin de Apache:
# !/usr/bin /python
importar cgi
def main():
imprimir Tipo de contenido: texto/htmln
form = cgi.FieldStorage ()
if form.has_key(ServiceCode) y form[ServiceCode].value != :
print h1 Hola, form[ServiceCode].value, / h1
else:
imprimir h1 ¡Error! Ingrese el nombre./h1
main()
python envía la publicación y obtiene solicitudes
Obtener solicitud:
Cuando se utiliza el método get, los datos de la solicitud se colocan directamente en la URL.
Método 1.
7
8
importar urllib
importar urllib2
url =
req = urllib2.Request(url)
solicitud de impresión
res_data = urllib2.urlopen(req)
res = res_data.read()
imprimir res
Método 2,
7
importar httplib
url =
conn = httplib.HTTPConnection(192.168.81.16)
conn.request(método=GET, url=url)
respuesta = conn.getresponse( )
res= respuesta.read()
imprimir res
solicitud de publicación:
Cuando se utiliza el método de publicación, los datos son colocado en datos O en el cuerpo, no se puede colocar en la URL. Si se coloca en la URL, se ignorará.
Método 1,
importar urllib
importar urllib2
test_data = {ServiceCode: aaaa, b: bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
req = urllib2.Request(url = requrl, data =test_data_urlencode)
solicitud de impresión
res_data = urllib2.urlopen(req)
res = res_data.read()
imprimir res
Método 2, p>
p>
11
importar urllib
importar httplib
test_data = {ServiceCode: aaaa, b: bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
headerdata = {Host: 192.168.81.16}
conn = httplib.HTTPConnection( 192.168.81.16)
conn.request(método=POST, url=requrl, cuerpo=test_data_urlencode, encabezados = headerdata)
respuesta = conn.getresponse()
res= respuesta .read()
print res
No estoy seguro del uso de json en Python, así que utilicé temporalmente el método urllib.urlencode(test_data);
Módulo urllib, la diferencia entre urllib2 y httplib
httplib implementa los protocolos de cliente de http y https, pero en Python, los módulos urllib y urllib2 encapsulan httplib en un nivel superior.
Presentando las funciones utilizadas en el ejemplo:
1. Función HTTPConnection
httplib.HTTPConnection(host[,port[,stict[,timeout]] ] )
Este es el constructor, que representa una interacción con el servidor, es decir, solicitud/respuesta
host identifica el host del servidor (IP del servidor o nombre de dominio)
El valor predeterminado del puerto es 80
El modo estricto es Falso, lo que indica si se debe generar una excepción BadStatusLine cuando la línea de estado devuelta por el servidor no se puede analizar
Por ejemplo :
conn = httplib.HTTPConnection(192.168.81.16, 80) Establece una conexión con el servidor.
2. Función HTTPConnection.request(método, url[, cuerpo[, encabezado]])
Esta es la forma de enviar una solicitud al servidor
solicitud de método, generalmente publicar u obtener,
Por ejemplo:
método=POST o método=Obtener
url del recurso solicitado, recurso solicitado (página o CGI , aquí somos CGI)
Por ejemplo:
url=
o
url=
cuerpo debe enviarse Los datos al servidor pueden ser json o el formato anterior. json necesita llamar al módulo json
encabezados solicitados encabezado http headerdata = {Host: 192.168.81.16}
Por ejemplo:
test_data = {ServiceCode: aaaa, b: bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
headerdata = {Host: 192.168.81.16}
conn = httplib.HTTPConnection(192.168.81.16, 80)
conn.request(method=POST, url=requrl, body=test_data_urlencode, headers = headerdata)
conn debe cerrarse después de su uso, función conn.close()
3. HTTPConnection.getresponse()
Esta es Obtener la respuesta http. El objeto devuelto es una instancia de HTTPResponse.
4. Introducción a HTTPResponse:
Las propiedades de HTTPResponse son las siguientes:
read([amt]) obtiene el cuerpo del mensaje de respuesta, amt significa lectura del flujo de respuesta Especifique bytes de datos. Si no se especifica, se leerán todos los datos;
getheader(name[, default]) obtiene el encabezado de la respuesta. El nombre representa el nombre de dominio del encabezado. no hay nombre de dominio de encabezado, predeterminado Se usa para especificar el valor de retorno
getheaders() obtiene encabezados en forma de lista
Por ejemplo:
1
2
3
4
5
fecha=response.getheader(fecha);
imprimir fecha
resheader=
resheader=response.getheaders();
imprimir resheader
Información del encabezado de respuesta en forma de columna:
1
2
3
[(longitud del contenido, 295), (rangos de aceptación, bytes) , (servidor, Apache), (última modificación, sábado 31 de marzo de 2012 10:07:02 GMT), (conexión, cierre), (etag, e8744-127-4bc871e4fdd80), (fecha, lunes 3 de septiembre de 2012 10 :01:47 GMT), (tipo de contenido, texto/html)]
fecha=response.getheader(fecha);
imprimir fecha
Obtener el valor de fecha del encabezado de respuesta.
Espero que este artículo sea útil para la programación en Python de todos.