¿Cuál es la forma más rápida de HTTP GET en Python si sé que el contenido será una cadena? Estoy buscando en la documentación una línea rápida como:
contents = url.get("http://example.com/foo/bar")
Pero todo lo que puedo encontrar usando Google son httplib
y urllib
, y no puedo encontrar un acceso directo en esas bibliotecas.
¿Python 2.5 estándar tiene un acceso directo en alguna forma como se indicó anteriormente, o debería escribir una función url_get
?
- Preferiría no capturar la salida del bombardeo hacia
wget
ocurl
.
python
http
networking
Frank Krueger
fuente
fuente
Respuestas:
Python 3:
Python 2:
Documentación para
urllib.request
yread
.fuente
close
despuésread
. ¿Es eso necesario?read
. Pero unwith
bloqueo sería más claro y seguro para Jython, etc.requests
funciona bienr = urllib2.urlopen("http://blah.com/blah")
y luegotext = r.read()
. Es sincronización, solo espera el resultado en "texto".Podría usar una biblioteca llamada solicitudes .
Esto es bastante facil. Entonces puedes hacer esto:
fuente
pip install
). Para las bibliotecas no puras, hay un paso adicional: necesitapip install
la biblioteca en una instancia de AWS Linux (la misma variante de sistema operativo con la que se ejecutan las lambdas), luego copie esos archivos para tener compatibilidad binaria con AWS Linux. Las únicas bibliotecas que no siempre podrá usar en Lambda son aquellas con distribuciones binarias solamente, que afortunadamente son bastante raras.pip install requests
.from botocore.vendored import requests
Usoresponse = requests.get('...')
Si desea que la solución con httplib2 sea única, considere crear instancias de un objeto Http anónimo
fuente
Eche un vistazo a httplib2 , que, junto a muchas funciones muy útiles, proporciona exactamente lo que desea.
Donde el contenido sería el cuerpo de respuesta (como una cadena), y resp contendría los encabezados de estado y respuesta.
Sin embargo, no viene incluido con una instalación estándar de Python (pero solo requiere Python estándar), pero definitivamente vale la pena echarle un vistazo.
fuente
Es bastante simple con el poderoso
urllib3
biblioteca.Importarlo así:
Y haga una solicitud como esta:
También puedes agregar encabezados:
Se puede encontrar más información en la documentación de urllib3 .
urllib3
es mucho más seguro y fácil de usar que el integradourllib.request
o loshttp
módulos y es estable.fuente
La solución de theller para wget es realmente útil, sin embargo, descubrí que no imprime el progreso durante el proceso de descarga. Es perfecto si agrega una línea después de la declaración de impresión en reporthook.
fuente
Aquí hay un script wget en Python:
fuente
Sin más importaciones necesarias, esta solución funciona (para mí), también con https:
A menudo tengo dificultades para obtener el contenido cuando no especifico un "Agente de usuario" en la información del encabezado. Luego, generalmente, las solicitudes se cancelan con algo como:
urllib2.HTTPError: HTTP Error 403: Forbidden
ourllib.error.HTTPError: HTTP Error 403: Forbidden
.fuente
Cómo enviar también encabezados
Python 3:
Python 2:
fuente
Si está trabajando específicamente con las API HTTP, también hay opciones más convenientes, como Nap .
Por ejemplo, aquí le mostramos cómo obtener lo esencial de Github desde el 1 de mayo de 2014 :
Más ejemplos: https://github.com/kimmobrunfeldt/nap#examples
fuente
Excelentes soluciones Xuan, Theller.
Para que funcione con Python 3, realice los siguientes cambios
Además, la URL que ingrese debe ir precedida de un "http: //", de lo contrario, devolverá un error de tipo de URL desconocido.
fuente
Para
python >= 3.6
, puedes usar dload :Para
json
:Instalar en pc:
pip install dload
fuente
En realidad, en Python podemos leer desde urls como desde archivos, aquí hay un ejemplo para leer json desde API.
fuente
Si quieres una API de nivel inferior:
fuente