我目前正在编写一个网络爬虫,为我的 Python Flask 服务器提供数据。我的目标是将 POST 请求发送到服务器并检索 JSON。我的 Flask API 目前托管在运行 Linux 的 Heroku dyno 上。不久前,服务器添加了 cookie 验证,这意味着我必须使用 cookie 发送 POST 请求。然而,服务器最近还添加了某种 IP 匹配,这意味着我无法在 Windows 计算机上为 Heroku 服务器使用相同的 cookie 字符串。这是我在两台机器上运行的内容:import requestsurl = "https://coursebook.utdallas.edu/clips/clip-coursebook.zog" # POST endpointpayload = "action=search&s%5B%5D=ecs+3390&s%5B%5D=term_20f" # "ecs 3390" is the queryheaders = { 'Connection': 'keep-alive', 'Accept': '*/*', 'DNT': '1', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Origin': 'https://coursebook.utdallas.edu', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Dest': 'empty', 'Referer': 'https://coursebook.utdallas.edu/search', 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6', 'Cookie': 'PTGSESSID=052a6577047da9c404825cc393c56445'}response = requests.request("POST", url, headers=headers, data = payload)print(response.text.encode('utf8'))在我的 Windows 机器上,我收到的响应很好;但是,当我使用相同的代码在 MacOS 上运行它时,它会返回空白响应,因为 cookie 不匹配(您可以使用相同的代码尝试);如果我随后在 Mac 上访问该网站并通过正常方式发送请求手动获取 cookie 字符串,并将其替换为 Python 代码,那么它现在可以在 Mac 上运行。但是,这需要我实际打开浏览器,转到 URL,然后单击按钮发送 POST 请求,然后从开发人员控制台获取 cookie 字符串。这在 Heroku dynos 上显然是不可能的,这意味着我已经从我的树莓派运行这个服务器有一段时间了。我尝试获取登陆页面(https://coursebook.utdallas.edu/search),我可以在其中发送 GET 请求并从标头获取 SET-COOKIES,但该 cookie 字符串似乎不起作用,这是奇怪的。我很确定这应该非常简单,因为在网站上发送请求似乎一点也不困难。对于这么长的帖子表示歉意,但如果您有任何想法,请告诉我!我的树莓派感谢你们终于能够关闭了。
添加回答
举报
0/150
提交
取消