[問題] POSTMAN和python跑request結果不一致

看板Python作者 (費德勒5566)時間1月前 (2024/10/11 14:52), 編輯推噓3(3065)
留言68則, 8人參與, 2周前最新討論串1/1
先前有問問題,承蒙幾位前輩指正 所以做了一些測試 先以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

10/11 15:03, 1月前 , 1F
requests.post?
10/11 15:03, 1F

10/11 15:28, 1月前 , 2F
改resquests.post也是一樣的error code
10/11 15:28, 2F

10/11 15:28, 1月前 , 3F
wireshark抓包的部分也一樣導去那個怪地方
10/11 15:28, 3F

10/11 16:34, 1月前 , 4F
你可能還需要補一些資訊;這個錯誤是使用 requests 就立刻
10/11 16:34, 4F

10/11 16:34, 1月前 , 5F
出現,還是打了一陣子請求才出現?
10/11 16:34, 5F

10/11 16:37, 1月前 , 6F
僅僅只有這個錯誤訊息的話,就只能知道是連接超時,涉及的
10/11 16:37, 6F

10/11 16:37, 1月前 , 7F
原因很多。多數人碰到這個問題,比較有可能是因為超過了對
10/11 16:37, 7F

10/11 16:37, 1月前 , 8F
方伺服器允許的連結次數、或者是同一 IP 位址超過連結數量
10/11 16:37, 8F

10/11 16:37, 1月前 , 9F
,又或是 IP 被封禁導致。
10/11 16:37, 9F

10/11 16:38, 1月前 , 10F
抓包如果是出現錯誤之後才去抓,那也有可能是超過訪問上限
10/11 16:38, 10F

10/11 16:38, 1月前 , 11F
而被轉址,並不能夠有效定位問題唷。
10/11 16:38, 11F

10/11 16:43, 1月前 , 12F
假設你是同一台機器,且程式或 Postman 均沒有使用 proxy
10/11 16:43, 12F

10/11 16:44, 1月前 , 13F
訪問,比較有可能就是超過訪問次數導致的,因為 Postman 只
10/11 16:44, 13F

10/11 16:44, 1月前 , 14F
打一次請求,而許多人用 requests 會寫在循環中發起多個請
10/11 16:44, 14F

10/11 16:44, 1月前 , 15F
求;另外一個可能就是 headers 攜帶的內容跟 Postman 存在
10/11 16:44, 15F

10/11 16:44, 1月前 , 16F
差異,比如許多站點還會根據 User-Agent 去判斷。
10/11 16:44, 16F

10/11 17:07, 1月前 , 17F
嗯,我是按F5前就讓wireshark開始抓,應該不算是跑
10/11 17:07, 17F

10/11 17:08, 1月前 , 18F
失敗才去抓;另外,也沒有用迴圈去送request,只下1
10/11 17:08, 18F

10/11 17:08, 1月前 , 19F
次;User-Agent部分,我試著把postman的User-Agent設
10/11 17:08, 19F

10/11 17:09, 1月前 , 20F
給Python的requests去帶,結果看起來還是一樣...
10/11 17:09, 20F

10/11 17:10, 1月前 , 21F
發現沒回應到一個問題,我的錯誤是F5之後過一段時間
10/11 17:10, 21F

10/11 17:10, 1月前 , 22F
才出現,並不是執行後馬上跳出來
10/11 17:10, 22F

10/11 17:59, 1月前 , 23F
如果不是連線次數超過上限或是連線過於頻繁,比較大的可能
10/11 17:59, 23F

10/11 17:59, 1月前 , 24F
還是在 headers 的資訊。在 Postman 裡面可以生成請求對應
10/11 17:59, 24F

10/11 17:59, 1月前 , 25F
的 Python 程式碼,你可以先試試看
10/11 17:59, 25F

10/11 18:15, 1月前 , 26F
data=payload 改成 json=payload 試試
10/11 18:15, 26F

10/11 21:24, 1月前 , 27F
先json.dumps data=json.dumps(payload)
10/11 21:24, 27F

10/12 08:44, 1月前 , 28F
我也曾經有過postman可以,程式不可以,後來把postman旁
10/12 08:44, 28F

10/12 08:44, 1月前 , 29F
邊提供輸出的python程式碼,去和自己比對,才抓出自己的
10/12 08:44, 29F

10/12 08:44, 1月前 , 30F
問題
10/12 08:44, 30F

10/19 21:35, 4周前 , 31F
那,用curl會得到哪種結果?
10/19 21:35, 31F

10/21 15:09, 3周前 , 32F
有類似問題 get在瀏覽器工具編輯和重放請求可以成功
10/21 15:09, 32F

10/21 15:09, 3周前 , 33F
但請求複製curl轉python或丟postman都會被判定403
10/21 15:09, 33F

10/21 15:09, 3周前 , 34F
一樣是11號開始發生的
10/21 15:09, 34F

10/21 15:10, 3周前 , 35F
因為是get 沒上面data或json的問題 還有什麼可能原
10/21 15:10, 35F

10/21 15:10, 3周前 , 36F
因嗎
10/21 15:10, 36F

10/21 18:05, 3周前 , 37F
403 的錯誤資訊跟你說沒權限,要嘛 headers 沒有帶足夠的認
10/21 18:05, 37F

10/21 18:05, 3周前 , 38F
證資訊,要嘛就是 IP 被封;另外對方判斷認證資訊的方式跟
10/21 18:05, 38F

10/21 18:05, 3周前 , 39F
邏輯,也會影響要怎麼帶,很多時候未必是直接照著送就可以
10/21 18:05, 39F

10/21 18:05, 3周前 , 40F
了。
10/21 18:05, 40F

10/21 18:57, 3周前 , 41F
用Fiddler獲得的請求 用內建的Composer Raw有試過
10/21 18:57, 41F

10/21 18:57, 3周前 , 42F
headers順序變換 或是把key全轉小寫 都還是成功
10/21 18:57, 42F

10/21 18:57, 3周前 , 43F
DevTools的請求根據Fiddler Raw格式填上 也能成功
10/21 18:57, 43F

10/21 18:57, 3周前 , 44F
py用requests或http.client都不行 cmd用curl也不行
10/21 18:57, 44F

10/21 18:57, 3周前 , 45F
不知道還有什麼可能的判斷方式
10/21 18:57, 45F

10/21 19:03, 3周前 , 46F
在Fiddler把 header 剩 Host, Authorization,
10/21 19:03, 46F

10/21 19:03, 3周前 , 47F
Accept,
10/21 19:03, 47F

10/21 19:03, 3周前 , 48F
Accept-Encoding, Accept-Language, User-Agent,
10/21 19:03, 48F

10/21 19:03, 3周前 , 49F
Connection 還是有成功 還是python有什麼連線方式不
10/21 19:03, 49F

10/21 19:03, 3周前 , 50F
10/21 19:03, 50F

10/21 19:17, 3周前 , 51F
也有可能是對方需要 HTTP2 而 requests 不支持,一般會改用
10/21 19:17, 51F

10/21 19:17, 3周前 , 52F
httpx 試試
10/21 19:17, 52F

10/21 19:21, 3周前 , 53F
有些站點還會根據 TLS fingerprint 去比對客戶端,這時候會
10/21 19:21, 53F

10/21 19:21, 3周前 , 54F
用 curl_cffi 套件處理。可能的狀況有很多,要看對方伺服器
10/21 19:21, 54F

10/21 19:21, 3周前 , 55F
的判斷機制是什麼
10/21 19:21, 55F

10/21 19:28, 3周前 , 56F
如果瀏覽器、Postman 跟抓包工具都正常的話,比較有機會是
10/21 19:28, 56F

10/21 19:28, 3周前 , 57F
TLS 指紋的問題
10/21 19:28, 57F

10/21 19:31, 3周前 , 58F
如果對方反爬的限制不嚴格,那 httpx 也可以設定簡單的 cip
10/21 19:31, 58F

10/21 19:31, 3周前 , 59F
hers 繞過
10/21 19:31, 59F

10/21 21:11, 3周前 , 60F
更新一下 curl -v "url" -H "Authorization: ..."
10/21 21:11, 60F

10/21 21:11, 3周前 , 61F
-H "User-Agent: ..." 可以成功 是用 HTTP/1.1
10/21 21:11, 61F

10/21 21:11, 3周前 , 62F
會自動補上 Host 跟 Accept: */*
10/21 21:11, 62F

10/21 21:11, 3周前 , 63F
最後先用subprocess跟curl解決 requests暫時沒想法
10/21 21:11, 63F

10/23 18:49, 3周前 , 64F
https://httpbin.org/headers 這個會回傳送出去的headers
10/23 18:49, 64F

10/28 14:39, 2周前 , 65F
不好意思,我是這篇的原po,我的python code就是從
10/28 14:39, 65F

10/28 14:40, 2周前 , 66F
POSTMAN裡轉成python的,偏偏wireshark抓包結果不一
10/28 14:40, 66F

10/28 17:06, 2周前 , 67F
如同我前面說的,你要不要再試試看調整 TLS 指紋或改用 HTT
10/28 17:06, 67F

10/28 17:07, 2周前 , 68F
P2
10/28 17:07, 68F
文章代碼(AID): #1d2CiiHO (Python)
文章代碼(AID): #1d2CiiHO (Python)