看板 Python 關於我們 聯絡資訊
先前有問問題,承蒙幾位前輩指正 所以做了一些測試 先以postman送https post,順利執行成功 但用python用request去送,卻出現 Failed to establish a new connection: [WinError 10060] 所以試著用wireshark去抓封包觀察 發現兩者在最初的standard query和回應的standard query response都長一樣 但下一步卻connect到不同的地方 postman是正確的CONNECT到我請求的API位址 但python request卻是CONNECT到mobile.events.data.microsoft.com 一整個超莫名其妙 覺得問題應該就出在這裡,但完全不知道如何解決 不曉得該怎麼解決這個問題 有勞高手指點>< python code是長下面這樣(私密資料已代換): import requests import json url = https://API位址 payload = json.dumps({ "to": "XXXXXX", "messages": [ { "type": "text", "text": "測試訊息" } ] }) headers = { 'Content-Type': 'application/json', 'Authorization': 認證資料 } response = requests.request("POST", url=url, headers=headers, data=payload) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.71.217.244 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1728629548.A.458.html
TuCH: requests.post? 10/11 15:03
Federer5566: 改resquests.post也是一樣的error code 10/11 15:28
Federer5566: wireshark抓包的部分也一樣導去那個怪地方 10/11 15:28
Hsins: 你可能還需要補一些資訊;這個錯誤是使用 requests 就立刻 10/11 16:34
Hsins: 出現,還是打了一陣子請求才出現? 10/11 16:34
Hsins: 僅僅只有這個錯誤訊息的話,就只能知道是連接超時,涉及的 10/11 16:37
Hsins: 原因很多。多數人碰到這個問題,比較有可能是因為超過了對 10/11 16:37
Hsins: 方伺服器允許的連結次數、或者是同一 IP 位址超過連結數量 10/11 16:37
Hsins: ,又或是 IP 被封禁導致。 10/11 16:37
Hsins: 抓包如果是出現錯誤之後才去抓,那也有可能是超過訪問上限 10/11 16:38
Hsins: 而被轉址,並不能夠有效定位問題唷。 10/11 16:38
Hsins: 假設你是同一台機器,且程式或 Postman 均沒有使用 proxy 10/11 16:43
Hsins: 訪問,比較有可能就是超過訪問次數導致的,因為 Postman 只 10/11 16:44
Hsins: 打一次請求,而許多人用 requests 會寫在循環中發起多個請 10/11 16:44
Hsins: 求;另外一個可能就是 headers 攜帶的內容跟 Postman 存在 10/11 16:44
Hsins: 差異,比如許多站點還會根據 User-Agent 去判斷。 10/11 16:44
Federer5566: 嗯,我是按F5前就讓wireshark開始抓,應該不算是跑 10/11 17:07
Federer5566: 失敗才去抓;另外,也沒有用迴圈去送request,只下1 10/11 17:08
Federer5566: 次;User-Agent部分,我試著把postman的User-Agent設 10/11 17:08
Federer5566: 給Python的requests去帶,結果看起來還是一樣... 10/11 17:09
Federer5566: 發現沒回應到一個問題,我的錯誤是F5之後過一段時間 10/11 17:10
Federer5566: 才出現,並不是執行後馬上跳出來 10/11 17:10
Hsins: 如果不是連線次數超過上限或是連線過於頻繁,比較大的可能 10/11 17:59
Hsins: 還是在 headers 的資訊。在 Postman 裡面可以生成請求對應 10/11 17:59
Hsins: 的 Python 程式碼,你可以先試試看 10/11 17:59
blc: data=payload 改成 json=payload 試試 10/11 18:15
lycantrope: 先json.dumps data=json.dumps(payload) 10/11 21:24
hanksky: 我也曾經有過postman可以,程式不可以,後來把postman旁 10/12 08:44
hanksky: 邊提供輸出的python程式碼,去和自己比對,才抓出自己的 10/12 08:44
hanksky: 問題 10/12 08:44
HerryL: 那,用curl會得到哪種結果? 10/19 21:35
JerryChungYC: 有類似問題 get在瀏覽器工具編輯和重放請求可以成功 10/21 15:09
JerryChungYC: 但請求複製curl轉python或丟postman都會被判定403 10/21 15:09
JerryChungYC: 一樣是11號開始發生的 10/21 15:09
JerryChungYC: 因為是get 沒上面data或json的問題 還有什麼可能原 10/21 15:10
JerryChungYC: 因嗎 10/21 15:10
Hsins: 403 的錯誤資訊跟你說沒權限,要嘛 headers 沒有帶足夠的認 10/21 18:05
Hsins: 證資訊,要嘛就是 IP 被封;另外對方判斷認證資訊的方式跟 10/21 18:05
Hsins: 邏輯,也會影響要怎麼帶,很多時候未必是直接照著送就可以 10/21 18:05
Hsins: 了。 10/21 18:05
JerryChungYC: 用Fiddler獲得的請求 用內建的Composer Raw有試過 10/21 18:57
JerryChungYC: headers順序變換 或是把key全轉小寫 都還是成功 10/21 18:57
JerryChungYC: DevTools的請求根據Fiddler Raw格式填上 也能成功 10/21 18:57
JerryChungYC: py用requests或http.client都不行 cmd用curl也不行 10/21 18:57
JerryChungYC: 不知道還有什麼可能的判斷方式 10/21 18:57
JerryChungYC: 在Fiddler把 header 剩 Host, Authorization, 10/21 19:03
JerryChungYC: Accept, 10/21 19:03
JerryChungYC: Accept-Encoding, Accept-Language, User-Agent, 10/21 19:03
JerryChungYC: Connection 還是有成功 還是python有什麼連線方式不 10/21 19:03
JerryChungYC: 同 10/21 19:03
Hsins: 也有可能是對方需要 HTTP2 而 requests 不支持,一般會改用 10/21 19:17
Hsins: httpx 試試 10/21 19:17
Hsins: 有些站點還會根據 TLS fingerprint 去比對客戶端,這時候會 10/21 19:21
Hsins: 用 curl_cffi 套件處理。可能的狀況有很多,要看對方伺服器 10/21 19:21
Hsins: 的判斷機制是什麼 10/21 19:21
Hsins: 如果瀏覽器、Postman 跟抓包工具都正常的話,比較有機會是 10/21 19:28
Hsins: TLS 指紋的問題 10/21 19:28
Hsins: 如果對方反爬的限制不嚴格,那 httpx 也可以設定簡單的 cip 10/21 19:31
Hsins: hers 繞過 10/21 19:31
JerryChungYC: 更新一下 curl -v "url" -H "Authorization: ..." 10/21 21:11
JerryChungYC: -H "User-Agent: ..." 可以成功 是用 HTTP/1.1 10/21 21:11
JerryChungYC: 會自動補上 Host 跟 Accept: */* 10/21 21:11
JerryChungYC: 最後先用subprocess跟curl解決 requests暫時沒想法 10/21 21:11
blc: https://httpbin.org/headers 這個會回傳送出去的headers 10/23 18:49
Federer5566: 不好意思,我是這篇的原po,我的python code就是從 10/28 14:39
Federer5566: POSTMAN裡轉成python的,偏偏wireshark抓包結果不一 10/28 14:40
Hsins: 如同我前面說的,你要不要再試試看調整 TLS 指紋或改用 HTT 10/28 17:06
Hsins: P2 10/28 17:07
Lordaeron: 不是應該先問,該domain 如果不是由你提供的,哪麼它是 11/26 15:56
Lordaeron: 從何而來的呢?這才是你先要關心的問題吧. 11/26 15:56