将 cURL 转换为 Delphi

问题描述 投票:0回答:1

我使用的是Delphi 10.2。 我使用 API 提供商提供的工具生成了此 cURL 语句,在该环境中它成功运行并返回结果。

curl --request POST \
  --url https://api.netradyne.com/driveri/v1/tenants/N251887947004171/driver/assignment \
  --header 'Accept: application/json' \
  --header 'Accept-Language: en-US' \
  --header 'Authorization: Bearer <access token replaced>' \
  --header 'Content-Type: application/json' \
  --data '{
  "driverID": "48625329",
  "vehicleID": "1393",
  "action": "login",
  "startTimestamp": 1720439154012,
  "endTimestamp": 1720439208018
}'

我已经使用 REST 调试器成功重现了另一个 cURL 语句,但我能得到的最好结果是以“400:Bad Request - 0 bytes of data returned...”开头的响应。

REST 调试器文件是:

{
    "method": "POST",
    "url": "https://api.netradyne.com/driveri/v1/tenants/N251887947004171/driver/assignment",
    "resource": "",
    "contenttype": "application/json",
    "auth": {
        "method": "OAUTH2",
        "username": "",
        "passwordkey": "",
        "password": "",
        "clientid": "",
        "clientsecret": "",
        "authcode": "",
        "accesstoken": "Bearer <access token replaced>",
        "accesstokensecret": "",
        "requesttoken": "",
        "requesttokensecret": "",
        "refreshtoken": "",
        "signaturemethod": "",
        "responsetype": "code",
        "endpointauth": "",
        "endpointaccesstoken": "",
        "endpointrequesttoken": "",
        "endpointredirect": "",
        "authscope": ""
    },
    "parameters": [
        {
            "name": "Authorization",
            "value": "Bearer <access token replaced>",
            "kind": "HEADER",
            "encode": false
        },
        {
            "name": "Accept",
            "value": "application/json",
            "kind": "HEADER",
            "encode": false
        },
        {
            "name": "Content-Type",
            "value": "application/json",
            "kind": "HEADER",
            "encode": false
        },
        {
            "name": "data",
            "value": "{\"driverID\": \"48625329\",\"vehicleID\": \"1393\",\"action\": \"login\",\"startTimestamp\": 1720439154012,\"endTimestamp\": 1720439208018}",
            "kind": "BODY",
            "encode": false
        }
    ],
    "body": ""
}

关于如何让 Delphi 生成此 API 所需的内容有什么想法吗?

delphi curl
1个回答
0
投票

我从

accesstoken
字段中删除了“Bearer”,并将 JSON 从参数移至正文。 REST 调试器生成的 JSON 包括
"body": "ZGF0YT17ImRyaXZlcklEIjogIjQ4NjI1MzI5IiwidmVoaWNsZUlEIjogIjEzOTMiLCJhY3Rpb24iOiAibG9naW4iLCJzdGFydFRpbWVzdGFtcCI6IDE3MjA0MzkxNTQwMTIsImVuZFRpbWVzdGFtcCI6IDE3MjA0MzkyMDgwMTh9"
。 在调试器中运行请求会生成 Windows 警报声和“(无响应)”。

当我使用调试器创建 Delphi 组件时,我得到一个 TRESTRequest,其中 Params 中的最后一个参数的名称为

body
,类型为
pkREQUESTBODY
,并且值为空。 我使用 cURL 语句中“数据”的值填充了 body 参数的值,并按下按钮来执行 TRESTRequest 并显示 TRESTResponse 的 Content 属性。 我得到的是

{"data":{"message":"驱动程序集成数据已成功接收。"}}

这是 cURL 语句的预期结果。 耶。

© www.soinside.com 2019 - 2024. All rights reserved.