【问题标题】:Send and Receive JSON using an https curl_exec call in PHP在 PHP 中使用 https curl_exec 调用发送和接收 JSON
【发布时间】:2013-02-07 06:13:03
【问题描述】:

我正在尝试使用 PHP 进行 curl 调用。我的项目有这样的流程

  • 我将用户重定向到服务器。
  • 用户使用服务,服务器将他重定向到我的应用程序上的页面。
  • 此时我想进行服务器到服务器调用以验证某些详细信息。

注意点 - 我发布 JSON 数据以及接收 JSON 数据作为响应。

我已经试过了。我可以发送数据,但没有收到任何响应。

这是正确的吗? 请帮忙!

$data = array("One" => "Onedata", "Two" => "Twodata");                                                                    
$JsonData = json_encode($data);
$ch = curl_init('https://exampleurl');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $JsonData);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
'Content-Type: application/json',  
'Content-Length: ' . strlen($JsonData))                                                                       
);                                                                                                                   

$result = curl_exec($ch);

【问题讨论】:

  • 没有没有回应这回事。如果失败,则有 curl 错误消息供您检查。如果成功,还有一个状态供您检查。
  • 好的,我使用 curl_getinfo($ch, CURLINFO_HTTP_CODE) 得到的响应是 0。我想这意味着 URL 不可访问?防火墙问题?
  • 我也检查了错误。这是发回的错误。 “SSL 证书问题,验证 CA 证书是否正常。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败”
  • 嘿,好吧,所以我找到了问题所在。 SSL 验证是问题所在。我使用 curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0) 将其关闭; curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);现在可以使用了。
  • 值得在下面发布您自己问题的答案并将其标记为正确,供关注的人使用。

标签: php curl


【解决方案1】:

正如你在评论中提到的:

问题在于主机的 SSL 验证。正确设置 SSL 需要一些努力(参见 http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/),因此解决方法是添加以下两个选项:

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

【讨论】:

    【解决方案2】:

    尝试使用以下对我有用的代码。并确保 json_url 正确。当你在浏览器上运行它时,你应该得到一个输出。在使用 CURL 尝试之前,先在浏览器上运行,看看是否得到了你想要的输出。

    $json_url  ='https://exampleurl';
    
    // Initializing curl
    $ch = curl_init( $json_url );
    
    // Configuring curl options
    $options = array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array('Content-type: application/json') 
    );
    
    // Setting curl options
    curl_setopt_array( $ch, $options );
    
    // Getting results
    $results =  curl_exec($ch); // Getting jSON result string
    
    $json_decoded = json_decode($results);
    

    【讨论】:

    • 不起作用。仍然是相同的结果。没有响应字符串和状态为 0 ..感谢您的帮助
    • 在使用 CURL 尝试之前,在浏览器上运行,看看是否得到了你想要的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2016-11-12
    相关资源
    最近更新 更多