Python 中的 Curl 命令

Curl command in Python

提问人:Andrew 提问时间:10/9/2023 最后编辑:Diego BorbaAndrew 更新时间:10/10/2023 访问量:78

问:

我正在使用Python3.9。 我有以下 curl 命令:

curl -x proxy1.req:8080 --location --request POST 'https://auth.trst.com/2.0' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'ct_id=33d3e1-4988-9a08-e7773634ba67' \
--data-urlencode 'ct_sec=56GgtoQA8.WIH9nFM3Eh3sT~cwH' \
--data-urlencode 'scope=https://auth.trst.com/settlement/.default' \
--data-urlencode 'grant_type=client_credentials'

返回的响应如下:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1355  100  1163  100   192   1340    221 --:--:-- --:--:-- --:--:--  1566{"access_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsiLCJ0eXAiOiJKV9SRSIsInNjcCI6ImRlZmF1bHQiLCJhenBhY3IiOiIxIiwic3ViIjoiZWI3OTU1OTktMzZhMy00SqQe5v9xuYRSfOb_gMgpt7Kez8B0dsnJ_SmT17Hbd7dXLS5p5xTva2iteHp80E2PBYy8jIdtDFcyyC3JSb_d1jzeRrtn5ILlR9eMiMMQa5k65rEXuWYlDpCCtyNS0vcbzA6raxuT1ux8-riCRnGe_TX-VP7FTzPxE7bN1N6N60Ahm7cvzmdDjtKgga0ltybKT2LKtT_hwIwYnuPOdYCGy5jYQ78kaZH86PVSXBuzHw","token_type":"Bearer","not_before":1696859605,"expires_in":3600,"expires_on":1696863205,"resource":"6f4cd1ba-556d-4cb3-ab69-12eac3243387"}

我想执行此命令并将令牌值存储在变量中,以便我可以将此变量用于进一步的逻辑,但不确定如何在 中执行此命令。curlPythonPythoncurlPython

python-3.x 变量 curl 令牌

评论

1赞 Abdul Niyas P M 10/9/2023
curl 是一个旨在用作 CLI 的 HTTP 客户端。如果要在 python 中使用相同的功能,请使用类似 .requests
0赞 Andrew 10/9/2023
你的意思是我必须使用模块重写 Python 中的 curl 逻辑吗?
1赞 Amzar 10/9/2023
也许你可以考虑.docs.python.org/3/library/subprocess.htmlsubprocess
1赞 Abdul Niyas P M 10/9/2023
您可以使用 在 python 中执行外部命令。但是,使用像请求这样的库有其自身的好处(速度/无需手动解析响应等)。subprocess

答:

2赞 Diego Borba 10/9/2023 #1

正如@AbdulNiyasPM所说:

curl 是一个旨在用作 CLI 的 HTTP 客户端。如果你想使用相同的功能,在 python 中使用像 requests 这样的库。

因此,您可以这样做:

import requests

# Request URL
url = 'https://auth.trst.com/2.0'

# Headers
headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
}

# Payload
payload = {
    'ct_id': '33d3e1-4988-9a08-e7773634ba67',
    'ct_sec': '56GgtoQA8.WIH9nFM3Eh3sT~cwH',
    'scope': 'https://auth.trst.com/settlement/.default',
    'grant_type': 'client_credentials'
}

# Proxy URL
proxy_url = 'http://proxy1.baag:8080'

# Make the request with the proxy
response = requests.post(url, headers=headers, data=payload, proxies={'http': proxy_url, 'https': proxy_url})

# Check if the request was successful (HTTP code 200)
if response.status_code == 200:
    # Parse the JSON response to get the access token
    response_data = response.json()
    access_token = response_data.get('access_token')
    
    # TODO: Use the access token as needed
else:
    # TODO: Handle the error

评论

0赞 Andrew 10/9/2023
我最后刚刚尝试添加 print(response),但它没有打印令牌值并返回为 <Response [200]>
0赞 Diego Borba 10/9/2023
你应该使用,我把它添加到答案中。response.text
0赞 Andrew 10/9/2023
感谢它现在工作,但它的打印完整响应现在与我使用 curl 的问题中提到的一样。如果我只想将access_token的值存储在变量中,那是不可能的吗?因为我想在此代码的进一步逻辑中使用此变量值。
0赞 Diego Borba 10/9/2023
知道了,我已经改进了答案。
1赞 Helge Derenthal 10/9/2023 #2

使用 library 直接做,没有 curl:requests

import requests

url = "https://auth.trst.com/2.0"

headers = {"Content-Type":"application/x-www-form-urlencoded"}

data = {"ct_id": "33d3e1-4988-9a08-e7773634ba67",
        "ct_sec": "56GgtoQA8.WIH9nFM3Eh3sT~cwH",
        "scope": "https://auth.trst.com/settlement/.default",
        "grant_type": "client_credentials"}

proxies = { "https" : "proxy1.baag:8080" }

r = requests.post(url, headers=headers, data=data proxies=proxies)

如果尚未安装 requests 库,请使用以下命令获取它:pip

python -m pip install requests