Cómo responde Python a la interfaz que envía solicitudes de obtención y publicación desde segundo plano
Prueba CGI en el directorio cgi-bin de Apache, llamado test.py:
#! /usr/bin/Python
importar cgi
def main():
imprimir "Tipo de contenido: texto/html\n"
form = cgi.FieldStorage()
si form.has_key("ServiceCode") y form["ServiceCode"].value ! = "":
imprimir "lt;h1gt;Hola", formulario["ServiceCode"].valor, "lt;/h1gt;"
más:
print "lt;h1gt; ¡Error! Ingrese un nombre.lt;/h1gt;"?
main()
Python envía publicaciones y recibe solicitudes
Obtener solicitud:
Cuando se utiliza el método get, los datos de la solicitud se colocarán directamente en la URL.
Método 1,
importar urllib
importar urllib2
url = "/')
html = Response.read()
imprimir html
Presione F5 para ver los resultados de ejecución:
Podemos abrir la página de inicio de Baidu, hacer clic derecho y seleccionar Ver Código fuente (se puede usar Firefox o Google Chrome), encontrará que el contenido interno es exactamente el mismo
En otras palabras, las cuatro líneas de código anteriores imprimen todos los códigos recibidos por el navegador. cuando visitamos Baidu
Este es el ejemplo más simple de urllib2
Excepto "')?
respuesta = urllib2.urlopen(req)?
the_page = respuesta.read()?
imprimir the_page
Puedes ver que el resultado es el mismo que test01.
urllib2 utiliza la misma interfaz para todos los encabezados de URL. Por ejemplo, puede crear una solicitud ftp como se muestra a continuación.
req = urllib2.Request('ftp://example.com/')
Las solicitudes HTTP le permiten hacer dos cosas.
1. Enviar datos desde un formulario
Para las personas que han trabajado en la Web, estos contenidos les resultan familiares.
A veces, desea enviar datos a un URL. Envíe algunos datos (normalmente la URL se conectará a un script CGI [Common Gateway Interface] u otra aplicación WEB).
En HTTP, los datos generalmente se envían mediante la conocida solicitud POST.
Esto normalmente lo hace el navegador cuando envía un formulario HTML.
No todos los POST provienen de formularios, puedes utilizar POST para enviar cualquier dato a tu programa.
Para formularios HTML normales, los datos deben codificarse en un formulario estándar. Luego, los datos se pasan al objeto Solicitud como parámetros de datos.
La codificación se realiza utilizando las funciones de urllib en lugar de urllib2.
Creemos un nuevo archivo urllib2_test03.py y familiaricémoslo:
¿importar urllib?
importar urllib2?
url = ' /register.cgi'?
valores = {'nombre': 'POR QUÉ',
'ubicación': 'SDU',
'language': 'Python' }?
data = urllib.urlencode(values) # Trabajo de codificación
req = urllib2.Request(url, data)?# Enviar una solicitud mientras pasando el formulario de datos
respuesta = urllib2.urlopen(req)?# Aceptar comentarios
the_page = respuesta.read()?# Leer contenido de comentarios
Si no se pasan datos. Parámetros que urllib2 utilizará para las solicitudes GET.
La diferencia entre las solicitudes GET y POST es que las solicitudes POST suelen tener "efectos secundarios",
cambian el estado del sistema de alguna manera (por ejemplo, enviar un resultado a su puerta) montones de basura).
Los datos también se pueden entregar codificándolos en la propia URL de solicitud de obtención.
¿importar urllib2?
importar urllib
datos = {}
datos['nombre'] = '¿POR QUÉ'? p>
datos['ubicación'] = 'SDU'?
datos['idioma'] = 'Python'
url_values = urllib.urlencode(datos) ?
imprimir valores_url
nombre=Alguien aquíamp; idioma=Pythonamp; ubicación=Northampton?
url = '/ejemplo.cgi'?
full_url = url '?' url_values
data = urllib2.open(full_url)
De esta manera puede obtener la transmisión de datos.
2. ¿Establecer encabezados en /cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'?
valores = {'nombre': 'POR QUÉ',
'ubicación': 'SDU',
'idioma': 'Python'}?
headers = { 'User-Agent' : user_agent }?
data = urllib.urlencode(valores)?
req = urllib2.Request(url, ¿datos, encabezados)?
respuesta = urllib2.urlopen(req)?
the_page = respuesta.read()?
Lo anterior es cómo Python usa urllib2 especificando Captura todo el contenido de la URL de la página web, muy sencillo, ¿verdad?