首页 > 解决方案 > 将 cURL 命令翻译成 PHP

问题描述

我有一个想翻译成 PHP 的 cURL 命令。

curl -XPOST -H"X-Ovh-Application: 7kbG7Bk7S9Nt7ZSV" -H "Content-type: application/json" \
https://ca.api.ovh.com/1.0/auth/credential  -d '{
    "accessRules": [
        {
            "method": "GET",
            "path": "/*"
        }
    ],
    "redirection":"https://www.mywebsite.com/"
}'

cURL 命令返回正确的值:

{"consumerKey":"6br3ends9irOEWuBDoKHVOjNk54LEQlxya","state":"pendingValidation","validationUrl":"https://eu.api.ovh.com/auth/?credentialToken=W6lERcYmhvrSewowZglIP2ZJYJ8DsiUlFpWaVGO5UtebHjO431nOcS7UMddOgebk"}

我在 PHP 中尝试过的内容:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://ca.api.ovh.com/1.0/auth/credential");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n    \"accessRules\": [\n        {\n            \"method\": \"GET\",\n            \"path\": \"/*\"\n        }\n    ],\n    \"redirection\":\"https://www.mywebsite.com/\"\n}");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = "X-Ovh-Application: 7kbG7Bk7S9Nt7ZSV";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
print_r($result);

该脚本不返回预期值:

{"message":"Received not described parameters: ({\"accessRules\":{\"method\":\"GET\",\"path\":\"/*\"}}) while calling credential"}

也许是因为帖子数据格式不正确?

标签: phpjsoncurl

解决方案


您必须使用真实的 json 对象才能发布数据。您可以使用 json_encode() 函数将 php 的数组对象转换为 json 数据。

你可以试试下面的代码:

$data = ['accessRules' => ['method' => 'GET', 'path' => '/*'], 'redirection' => 'https://www.mywebsite.com/'];    
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://ca.api.ovh.com/1.0/auth/credential");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = "X-Ovh-Application: 7kbG7Bk7S9Nt7ZSV";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
print_r($result);

推荐阅读