簡體   English   中英

如何將此 Curl 調用轉換為 Python 3?

[英]How can I convert this Curl call into Python 3?

我有以下 curl 可以成功將我登錄到網站。 它返回一個 302 和一個 cookie:

curl \
--verbose \
--request POST \
--data '__EVENTTARGET=&body%3Ax%3AtxtLogin=kingkong%40mailinator.com&body%3Ax%3AbtnLogin=&crypted_pass=736015615f9e251692a6a4aa8a7baa14' \
"https://emma.maryland.gov/page.aspx/en/usr/login"

不幸的是,我必須插入帳戶的真實用戶名和加密密碼。 否則這個 curl 它將無法工作。 但是,這是一個完全虛擬的帳戶,其中沒有私人數據。 所以請不要生我的氣。

我想使用requests.post()將其轉換為 Python3 代碼。 所以我做了這個代碼:

>>> requests.post(
...     url='https://emma.maryland.gov/page.aspx/en/usr/login',
...     data={
...         '__EVENTTARGET': '',
...         'body:x:txtLogin': 'kingkong@mailinator.com',
...         'body:x:btnLogin': '',
...         'crypted_pass': '736015615f9e251692a6a4aa8a7baa14'
...     }
... )
<Response [200]>

但是我從 Python3 代碼 (200) 得到的響應與我從 Curl (302) 得到的響應不匹配。 這意味着目標服務器感知到兩個請求之間的差異。

如何將 curl 轉換為發送完全相同的底層 HTTP 請求的 Python3?

您的requests代碼實際上比cURL命令更智能。

HTTP 302 - 是一個重定向,cURL 沒有關注它並給了你它得到的第一個響應。 您可以使用-L使 cURL 跟隨重定向: Is there a way to follow redirects with command line cURL?

requests代碼遵循重定向並給您最終響應,恰好是 HTTP 200。

-L試試你的 curl 命令,看看你是否得到 HTTP 200。

或者,您可以使用allow_redirects=False選項要求requests不遵循重定向: Is there an easy way to request a URL in python and NOT follow redirects?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM