Usando cookies do Chrome em solicitações Python
-
13-12-2019 - |
Pergunta
Estou tentando fazer login no http://www.steampowered.com site usando os cookies que recebi da minha sessão do Chrome.
Depois de pegar todos os cookie
dados da tabela, usando o comando SELECT * FROM cookie WHERE host_key LIKE '%steam%'
e os nomes das colunas: PRAGMA table_info(cookie)
e classifiquei todos os dados com compreensão de lista, não sei como passar tudo para requests
para que os cookies se tornem utilizáveis.
O request
de documentos digamos que você precisa passar um dict, ou seja cookies={'cookies':'are_working'}
mas então algumas das chaves name
s se sobrepõem, já que alguns dos name
são: Steam_Language
, embora sejam hosts diferentes.
editar:Acabei de encontrar Como adicionar cookie à instância cookieJar existente do cookielib em Python? o que pode me ajudar, mas não sei como formatar os cookies do Chrome para cookielib
Minha pergunta é: Como faço para passar cookies para vários sites diferentes requests
?
Solução
eu criei um módulo para carregar cookies do Firefox.
Exemplo de uso com solicitações:
import requests
import browser_cookie
cj = browser_cookie.firefox()
r = requests.get(url, cookies=cj)
Outras dicas
Lembre-se de que você está tentando fazer algo que a especificação HTTP tenta impedir intencionalmente que você faça (ou seja,enviar cookies para domínios de onde eles não vieram).Então você pode estar condenado desde o início.E para piorar as coisas para você, dei uma olhada rápida na maneira como o Steampowered implementa o login e você terá muito trabalho para fazer.
Voltando à sua pergunta...
Agora, supondo que seus cookies de sessão movidos a vapor sejam válidos (que podem não ser baseados nos métodos de criptografia, compartilhamento de chave e captcha que a página de login executa), você poderá fazer login com a biblioteca de solicitações simplesmente fornecendo um dict de cookie válido como o estado dos documentos.
my_cookies = {'cookiename1': 'cookievalue1', 'cookiename2': 'cookievalue2'}
response = requests.get(
'http://www.steampowered.com/mystuff',
cookies=my_cookies)
Além disso, não sei quais dados são armazenados nos bancos de dados dos quais você está obtendo os cookies, mas lembre-se de que eles podem armazenar todos os metadados que acompanham um cabeçalho 'Set-Cookie' (expiração, caminho, domínio, etc.).Essas são informações que o agente do usuário (Chrome, IE, a biblioteca de solicitações, etc.) usa para determinar quais cookies enviar em uma solicitação, mas não estão incluídas na solicitação.Um cabeçalho 'Cookie' possui apenas pares nome=valor.Então isso é tudo que você precisa fornecer em seu dicionário de cookies.
E, se você tiver dois cookies com o mesmo nome, escolha apenas um.Porque no final, provavelmente apenas um será avaliado ou o servidor simplesmente retornará um erro.