php - 将 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"}
也许是因为帖子数据格式不正确?
解决方案
您必须使用真实的 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);
推荐阅读
- odoo - 如何在odoo v10中将“day, hh:mm:ss”格式转换为hh:mm
- c - 在 C 中创建一个字符串后,我试图将其内容复制到该字符串的文件在我实际告诉它之前执行此操作
- git - github中是否有任何选项可以从其他用户的存储库中获取代码?
- php - 从今天和明天添加数组记录
- android - 有什么方法可以将我的手机摄像头信号连接到 ROS?
- editor - WinEdt中的鼠标滚轮滚动问题
- node.js - 使用机器人自动创建 youtube 播放列表和添加过滤视频
- node.js - 初始化脚本上的 Sanity Studio CMS(新贵)
- git - 如何指定登录 GitHub 的 ssh 密钥?
- python - 在 Pandas 中连接但保留重复的列名