【问题标题】:cURL PHP RESTful service always returning FALSEcURL PHP RESTful 服务总是返回 FALSE
【发布时间】:2011-08-05 04:04:16
【问题描述】:

我在将 json 对象发布到使用 REST 的 API 时遇到了一些困难。我是使用 cURL 的新手,但我已经搜索了所有内容以试图找到我的问题的答案,但没有找到答案。我的 cURL 请求总是返回 false。我知道它甚至没有发布我的 json 对象,因为我仍然会从 url 得到响应。我的代码如下。

<?php

//API KEY = APIUsername
//API_CODE = APIPassword
$API_Key = "some API key";
$API_Code = "some API code";
$API_email = "email@email.com";
$API_password = "ohhello";
$url = "http://someURL.com/rest.svc/blah";


$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
header('Content-type: application/json');
$authData = "{\"APIUsername\":\"$API_Key\",\"APIPassword\":\"$API_Code\",\"EmailAddress\":\"$API_email\",\"Password\":\"$API_password\"}";
curl_setopt($ch, CURLOPT_POSTFIELDS, $authData);

//make the request
$result = curl_exec($ch);
$response = json_encode($result);
echo $response;

curl_close() 
?>

$response 只返回“false”

有什么想法吗?

【问题讨论】:

    标签: php json rest curl restful-authentication


    【解决方案1】:

    $response 可能是错误的,因为curl_exec() 将错误(即失败)返回到$result。回显curl_error($ch)(在调用 curl_exec 之后)以查看 cURL 错误,如果这是问题所在。

    另一方面,我认为您的 CURLOPT_POSTFIELDS 格式无效。您不会将 JSON 字符串传递给它。

    这个参数可以作为 一个 urlencoded 字符串,例如 'para1=val1&para2=val2&...' 或作为 以字段名称为键的数组和 字段数据作为值。

    -- PHP docs for curl_setopt()


    更新

    避免 SSL 错误的快速方法是添加此选项:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    

    您收到 SSL 验证错误,因为 cURL 与浏览器不同,它没有预加载的受信任证书颁发机构 (CA) 列表,因此默认情况下不信任任何 SSL 证书。快速的解决方案是使用上面的行只接受证书而不进行验证。更好的解决方案是仅手动添加您想要接受的证书或 CA。请参阅this article on cURL and SSL 了解更多信息。

    【讨论】:

    • 在 curl_error($ch) 上,我收到以下消息。这是我要发布到的网址的问题吗? “SSL 证书问题,验证 CA 证书是否正常。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败”
    • 我认为这很常见。试试curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);。
    • 工作完美。感谢您的帮助!
    • 我在一个问题上花了 4 天时间,然后我发现你的帖子“CURLOPT_SSL_VERIFYPEER”对我有用 :) :) :)4
    猜你喜欢
    • 2016-06-08
    • 2014-02-18
    • 1970-01-01
    • 2020-12-27
    • 2014-08-26
    • 2012-08-23
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多