首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PHP/Curl返回错误使用CloudFlare API

通过PHP/Curl返回错误使用CloudFlare API
EN

Stack Overflow用户
提问于 2015-11-18 00:11:08
回答 3查看 9.6K关注 0票数 3

我正在通过PHP脚本更新我的DNS。我已经查看了与cURL相关的API文档,因此我试图将cURL帖子转换为post。

我有以下代码:

代码语言:javascript
复制
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.cloudflare.com/client/v4/zones/<MY_ZONE>/dns_records/<MY_ID>");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");

    $fields = array();
    $fields["X-Auth-Email"] = "someone@mydomain.com";
    $fields["X-Auth-Key"] = "MY_KEY";
    $fields["Content-Type"] = "application/json";
    curl_setopt($ch, CURLOPT_HTTPHEADER, $fields);

    $dnsData = array();
    $dnsData["id"] = "MY_ID";
    $dnsData["type"] = "A";
    $dnsData["name"] = "home";
    $dnsData["content"] = $newIPAddress;

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dnsData));


    echo "posting to API<br />";
    $result = curl_exec($ch);
    echo "Result: " . $result;

使用上面的代码,我将从Cloudflare获得以下响应。

{“成功”:假,“错误”:[{“代码”:6003,“消息”:“无效请求标题”,“error_chain”:{“代码”:6100,“消息”:“丢失X-8月-电子邮件标题”},{“代码”:6101,“消息”:“丢失X-8月-键标题”},{“代码”:6105,“消息”:“无效内容-类型标题,有效值为应用程序/json,多部分/表单-数据”}}],“消息”:[],“结果”:null}

我尝试将json_encode改为http_build_query,但两者都返回相同的错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-18 00:25:53

我认为你在滥用curl_setopt。

这是设置多个标头的正确方法:

代码语言:javascript
复制
curl_setopt($ch,CURLOPT_HTTPHEADER, ['HeaderName: HeaderValue','HeaderName2: HeaderValue2']);

编辑

为了更清楚地说明:

代码语言:javascript
复制
$headers = [ 
    'X-Auth-Email: someone@mydomain.com',
    'X-Auth-Key: MY_KEY',
    'Content-Type: application/json'
];

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

标题不是键/值对,而是值。

另外,您应该用http_build_query()发送POST数据。

票数 7
EN

Stack Overflow用户

发布于 2015-11-18 00:28:42

问题是,在传递表单数据时,您告诉它要使用application/json。将您的内容类型设置为multipart/form-data,它应该可以工作。如果您想要一个如何使用JSON的示例,请告诉我。

编辑: CURLOPT_HTTPHEADER不接受键/值,只接受值。更多信息

因此,需要将$fields["X-Auth-Email"] = "someone@mydomain.com";更改为:$fields[]= "X-Auth-Email: someone@mydomain.com";

票数 1
EN

Stack Overflow用户

发布于 2016-02-23 15:40:57

我已经测试过这段代码,我认为你可以毫无问题地使用它。示例:

代码语言:javascript
复制
    $request_headers = array(
    'X-Auth-Email: user@emailaddress.com',
    'X-Auth-Key: d820fa8fc881921323e08a2c19b8347896ac26',
    'Content-Type: application/json'
);

然后:

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33769538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档