aprendizaje del rastreador de Python 25
contenido
Cuarto, biblioteca httpx
Luego continuó el progreso de ayer:
4-4 objeto cliente
Hay un objeto de cliente en httpx, para su uso, podemos analogizar la sesión en la biblioteca de solicitudes:
# client 对象
import httpx
with httpx.Client() as cli:
resp = cli.get('https://www.httpbin.org/get')
print(resp)
resultado de la operación:
El uso oficial recomendado para el cliente es la declaración with...as, pero también podemos ser equivalentes a lo siguiente:
# 等价为 ↓↓↓↓↓
import httpx
client = httpx.Client()
try:
resp = client.get('https://www.httpbin.org/get')
print(resp)
finally:
client.close()
resultado de la operación:
Al mismo tiempo, al configurar el objeto del cliente, también puede especificar algunos parámetros:
import httpx
url = 'http://www.httpbin.org/get'
headers = {
'User-Agent': 'this is a user-agent'}
with httpx.Client(headers=headers) as client:
resp = client.get(url)
print(resp.json()['headers']['User-Agent'])
De la respuesta devuelta por el sitio web, extraemos el campo User-Agent establecido, lo que indica que asignamos correctamente la propiedad de los encabezados:
4-5 Soporte HTTP/2.0
Para el soporte de httpx para http/2.0, lo hemos cubierto en 4-3:
import httpx
# 如果不设置http2字段 httpx库默认不会支持http2.0
client = httpx.Client(http2=True)
url1 = 'http://www.httpbin.org/get'
url2 = 'https://spa16.scrape.center/'
resp1 = client.get(url2)
print('resp1:', resp1.http_version)
resp2 = client.get(url1)
print('resp2:', resp2.http_version)
resp3 = httpx.get(url1)
print('resp3:', resp3.http_version)
resultado de la operación:
Al comparar los tres conjuntos de resultados anteriores, también podemos sacar una conclusión: después de configurar HTTP2.0, solo cuando el cliente del lado del servidor solicite usar HTTP2.0, utilizará HTTP2.0 para la transmisión; de lo contrario, en general (el la página web usa HTTP1 .1 puede obtener el correspondiente) Incluso si se ha configurado el soporte para 2.0, seguirá usando HTTP1.1 para la transmisión.
4-6 Solicitud asincrónica de soporte
httpx también admite solicitudes de clientes asíncronos, lo que admite el modo de solicitud asíncrona de python:
# 支持异步请求:
import httpx
import asyncio
async def fetch(url):
async with httpx.AsyncClient(http2=True) as cli:
resp = await cli.get(url)
print(resp.text)
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(fetch('http://www.httpbin.org/get'))
resultado de la operación:
¿Qué es una solicitud asíncrona? No sé, tal vez lo sepas cuando aprendas allí.
Hasta ahora, el aprendizaje de httpx está completo y aún no ha terminado.