使用浏览器中现有的经过身份验证的会话在python上执行https请求

问题描述 投票:4回答:3

是否可以采用现有登录会话(例如在Chrome中)并将该会话传递给python脚本以执行https请求?

要明确我想做什么,有一个网站的内容只有在你登录时才能被访问,但是为简单的http auth卷曲凭证是不可行的,因为它实际上有验证码。所以我要做的是,登录说浏览器,并将该会话提取到python脚本,并通过该会话请求URL。我有道理吗?

import requests

url="http://stackoverflow.com/"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36"}
cookie = {
    "domain": ".stackoverflow.com",
    "expirationDate": "1427212131.77312",
    "hostOnly": "false",
    "httpOnly": "true",
    "name": "usr",
    "path": "/",
    "secure": "false",
    "session": "false",
    "storeId": "0",
    "value": "SOMEVALUE",
    "id": "5"
}

t = open("response.txt", "w")


t.write(requests.get(url, headers=headers, cookies=cookie).text.encode("ascii", "ignore"))

所以我尝试了这个,它似乎没有让我到任何地方。如果我查看响应,我发现它实际上是没有任何用户登录的页面。不知道我还缺少什么......

python session https
3个回答
2
投票

如果您重复使用浏览器的cookie和用户代理,这应该是可行的。据我所知,任何这样的解决方案都是特定于浏览器的:我遇到过a script,它使用SQLite提取Chrome cookie并使用它们通过Requests库发出HTTP请求。

脚本的chrome_cookies方法返回包含cookie的字典。如果使用Requests库,则可以在发出请求时将字典作为关键字参数传递:

import requests
import pyCookieCheat

url = 'http://www.example.com'

s = requests.Session()
cookies = pyCookieCheat.chrome_cookies(url)
s.get(url, cookies = cookies)

1
投票

为什么不解析生成的CAPTCHA,显示图像并手动输入解决方案?与实际劫持会话相比,它可能更容易解决您的问题。另外,它会产生更便携和稳定的脚本(可能)。


0
投票

这可能有所帮助

jar = requests.cookies.RequestsCookieJar([
{
    "domain": ".stackoverflow.com",
    "expirationDate": "1427212131.77312",
    "hostOnly": "false",
    "httpOnly": "true",
    "name": "usr",
    "path": "/",
    "secure": "false",
    "session": "false",
    "storeId": "0",
    "value": "SOMEVALUE",
    "id": "5"
}]
requests.get(url, headers=headers, cookies=jar)

@Stupid.Fat.Cat让我知道什么对你有用