Anidamiento del diccionario de títulos
Primero, veamos sus diferencias.
Urllib y urllib2
Tanto urllib como urllib2 son módulos relacionados que aceptan solicitudes de URL, pero urllib2 puede aceptar una instancia de la clase de solicitud para establecer el encabezado de la solicitud de URL, mientras que urllib Solo puedo aceptar URL.
Esto significa que no puedes disfrazar la cadena de tu agente de usuario, etc.
Urllib proporciona el método urlencode para obtener la generación de cadenas de consulta, pero urllib2 no. Es por eso que urllib se usa a menudo junto con urllib2.
La mayoría de las tablas actualmente; MSIE 5.5Windows NT)' #Escribe user_agent en la información del encabezado.
valores = {'nombre': 'quién', 'contraseña': '123456'}
encabezados = {'agente-usuario': agente-usuario} p>
datos = urllib.urlencode(valor)
req = urllib2. request(url, data, title)
respuesta = urllib2.urlopen(req)
_page = respuesta.read()
El valor son los datos posteriores .
Método de obtención
Por ejemplo, Baidu:
De esta manera, necesitamos codificar la URL del diccionario {'wd':' XXX'}.
#Encoding: utf-8
Importar urllib
Importar urllib2
url = ' '
valores = {'wd':'D_in'}
datos = urllib.urlencode(valor)
Imprimir datos
url2 = url '? ' datos
respuesta = urllib2.urlopen(url2)
_page = respuesta.read()
Imprimir página_
Método de cuenta
Importar urllib
Importar urllib2
url = ' '
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5Windows NT)' //Escribe user_agent en la información del encabezado.
Valores = {'nombre': 'quién', 'contraseña': '123456'}/datos de la publicación
encabezados = {'agente-usuario': agente-usuario }
Datos = urllib. urlencode(values)//Codifica en URL los datos publicados.
req=urllib2. Solicitud (url, datos, título)
respuesta = urllib2.urlopen(req)
_page = respuesta.read()
Uso de urllib2 junto con cookies
#Codificación: utf-8
Importar urllib2, urllib
Importar cookielib
url = r ' '
#Crear un contenedor para la cookie de cj
cj = cookielib.
CookieJar()
opener = URL lib 2. build _ opener(URL lib 2. HTTPCookieProcessor(cj))
#Codificar los datos que se publicarán.
datos = urllib . urlencode({ "correo electrónico": correo electrónico, "contraseña": contraseña})
r = opener.open(url, datos)
Imprimir cj
Uso simple de httplib
Ejemplo simple
#!/usr/bin/env python
# -* - codificación: utf-8 -*-
importar httplib
importar urllib
def enviar http():
datos = urllib. urlencode({ '@número': 12524, '@tipo': 'problema', '@acción': 'mostrar'})
encabezados = { "Tipo de contenido": "aplicación/x" -www-form-urlencoded ",
" Accept": "text/plain"}
conn = httplib. conexión http(' bugs . python . org ')
conn.request('POST', '/', datos, título)
httpres = conn.getresponse() p> p>
Imprimir httpres.status
Imprimir httpres.reason
Imprimir httpres.read()
if __name__ == '__main__ ': p>
Enviar http()
Ver el uso detallado.
Módulo Httplib
La biblioteca urllib y la biblioteca urilib2 en Python 3.x se fusionan en la biblioteca urllib. Entre ellos,
Primero, importe el módulo de la siguiente manera
importar urllib
importar urllib2
conviértase en
import urllib.request
Los métodos en urllib2 se utilizan de la siguiente manera.
Urllib2.urlopen() se convierte en urllib.request.urlopen().
Urllib2. Request() se convierte en urllib.request.Request().
Urllib2. URLError se convierte en urllib.error.URLError
Cuando desea utilizar la solicitud de publicación de urllib con datos,
en python2.
urllib.urlencode(data)
En python3, se convierte en
urllib.parse.urlencode(data)
Ejemplo de script uso:
En Python 2
Importar urllib
Importar urllib2
Importar json
Desde la configuración de importación de configuración
def url_request(self, action, url, * * extra_data): ABS_URL = "http://s:s/s" (settings.configs['Servidor'],
settings.configs["ServerPort"],
URL)
si acción en ('get','get'):
print(abs_url, extra_data)
Pruebe:
req = urllib2. Solicitud (abs_url)
req_data = urllib2.urlopen(req, time out = settings . configs[' request time out '])
Devolución de llamada = req_data.read()
# print "->; Respuesta del servidor: ", devolución de llamada
Devolución de llamada
Excepto urllib2. URLError para e:
Salir("\033[31;1ms\033[0m" e "
operación elif en ('post','POST'):
# print(abs_url, extra_data['params'])
Pruebe:
data_encode = urllib . p>req = urllib2.
request(url=abs_url, data=data_encode)
res_data = urllib2.urlopen(req, time out = settings . configs[' request time out '])
callback = res_data. read()
devolución de llamada = json.loads(devolución de llamada)
Imprimir("\033[31;1m[s]:[s]\033[0m respuesta:\ns" (acción, abs_url, devolución de llamada))
Devolver devolución de llamada
La excepción es e:
Imprimir ('- exec ', e)
Salir("\033[31;1ms\033[0m" e "
En python3.x
Importar urllib.request
Importar json p>
Importar ajustes desde configuración
Definir url_request(self, action, url, * *datos adicionales):
ABS_url = ' http:// s: s/s /' (settings.configs['serverIP'], settings.configs['ServerPort'], URL)
Si operación en ('get', 'Get'): # obtener solicitud
print(action, extra_data) try:
req = URL lib request (ABS_URL)
req _ data = urllib request . = settings . configs[' tiempo de espera de solicitud '])
Devolución de llamada = req_data.read()
Devolución de llamada
Excepto urllib.error.URLError como e :
Salir("\033[31;1ms\033[0m" e"
Operación elif en ('post', 'post '): #Enviar datos al servidor .
Pruebe:
data _ encode = urllib . urlencode(extra _ data[' params '])
req = solicitud de biblioteca de URL. (URL = ABS_URL, data=data_encode)
req_data = urllib request . .read()
Devolución de llamada = json.loads(callback.decode())
Devolución de llamada
Excepto urllib.request.URLError como e: p>
print('-exec',e)
exit("\033[31;1ms\033[0m" e"
set La configuración es la siguiente :
Configuración = {
'HostID': 2,
"Servidor":"Localhost",
[ Puerto del servidor] : 8000,
" URL ": {
get_configs': ['API/client/config', 'get'], #adquirir todo será un servicio monitoreado
service_report':['API/client/service/report/','post'],
},
'RequestTimeout': 30,
'ConfigUpdateInterval': 300, el valor predeterminado es # 5 minutos
}