O protocolo http em si não possui estado.Para manter o estado entre solicitações, existe um mecanismo de sessão e cookie. pedidos também fornece métodos correspondentes para manipulá-los.
O objeto de sessão em pedidos nos permite manter certos parâmetros entre pedidos HTTP, ou seja, o cabeçalho do pedido enviado pelo mesmo objeto de sessão carrega um parâmetro especificado. Obviamente, a aplicação mais comum é que ele pode manter os cookies em uma série de solicitações subsequentes.
Abaixo, através dos exemplos na documentação oficial para entender como usá-lo.
Import Pedidos S = requests.Session () # Passo: enviar um pedido, o pedido de definir cookies # Dicas: http://httpbin.org pode ser usado para testar a solicitação HTTP e resposta s.get ( ' http: //httpbin.org/cookies/set/sessioncookie/123456789 ' ) # Passo: um pedido de retransmissão para a solicitação atual para exibir os biscoitos R & lt s.get = ( " http://httpbin.org/cookies " ) print (r.text)
Resultado da operação
{ " cookies " : { " sessioncookie " : " 123456789 " } }
A partir dos resultados, podemos ver que a segunda solicitação carregou o cookie definido pela primeira solicitação, ou seja, o objetivo de manter o cookie é alcançado através da sessão. No exemplo, um objeto orders.Session () é criado e a operação de solicitação http é realizada por meio do objeto.Esta operação é basicamente semelhante a orders.request (). Você pode verificar a API de requisição de módulo de solicitação do python para entender.
Como a sessão torna as solicitações coerentes, há uma diferença entre os parâmetros de solicitação cruzada e os parâmetros de não solicitação cruzada. Ou seja, às vezes eu quero que todas as solicitações tenham um determinado parâmetro, e às vezes eu apenas quero uma única solicitação com parâmetros temporários. Use o exemplo a seguir para entender como usá-lo.
pedidos de importação s = orders.Session () s.headers.update ({ ' x-test ' : ' true ' }) # são enviados 'x-test' e 'x-test2' r1 = s.get ( ' http : //httpbin.org/headers ' , headers = { ' x-test2 ' : ' true ' }) print (r1.text) # ' x-test 'é enviado r2 = s.get ( ' http: // httpbin .org / headers ' ) print (r2.text)
Resultado da operação
# r1.text { " headers " : { " Accept " : " * / * " , " Accept-Encoding " : " gzip, deflate " , " Host " : " httpbin.org " , " User-Agent " : " python -requests / 2.22.0 " , " X-Amzn-Trace-Id " : "Raiz = 1-5e91656f-b99f14a4d6f47f9e55a90bb4 " , "Teste X " : " true " , " X-Test2 " : " true " } } # r2.text { " headers " : { " Accept " : " * / * " , " Accept-Encoding " : " gzip, deflate " , " Host " : " httpbin.org " , "Agente do Usuário " : "python-orders / 2.22.0 " , " X-Amzn-Trace-Id " : " Raiz = 1-5e91656f-e9741db4c2ca2fd6e0628396 " , " X-Test " : " true " } }
A partir dos resultados, podemos tirar duas conclusões:
- A sessão pode fornecer dados padrão para o método de solicitação.Por exemplo, {'x-test': 'true'} na primeira solicitação são os dados padrão e os dados padrão no momento são o parâmetro de solicitação cruzada.
- Os parâmetros no nível do método não serão mantidos entre as solicitações, por exemplo, a segunda solicitação não carrega os cabeçalhos = {'x-test2': 'true'} e o resultado retornado não contém {'x-test2': 'true' }, Indicando que o parâmetro não foi retido após a primeira solicitação.
Referências
- https://github.com/psf/requests/blob/master/requests/sessions.py
- https://requests.readthedocs.io/en/master/user/advanced/#session-objects