我目前正在編寫一個網絡爬蟲,為我的 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 字符串似乎不起作用,這是奇怪的。我很確定這應該非常簡單,因為在網站上發送請求似乎一點也不困難。對于這么長的帖子表示歉意,但如果您有任何想法,請告訴我!我的樹莓派感謝你們終于能夠關閉了。