【问题标题】:Using Curl to post data in Https server (PHP)使用 Curl 在 Https 服务器 (PHP) 中发布数据
【发布时间】:2015-12-17 07:58:55
【问题描述】:

我尝试在 php 中使用 Curl 访问 https 服务器的 api。我不知道为什么我无法访问它并且我得到 null 作为响应。

我的基本代码是这样的,

<?php

    $url = "https://my_website";
     $data = array(
        'groupName' => 'Test',
        'units' => 1,
        'principalEmail' => 'todd.bailey+onboard@rentmoola.com',
        'principalFirstName' => 'Todd',
        'principalLastName' => 'Bailey',
        'principalPhone' => 1212,
        'principalSSN' => 2121,
    );

    $jsonStringPOST = json_encode($data);
    $login = array('username'=>'some_user_name','password'=>'some_password');
    $headers = array('Accept: application/json','Content-Type: application/json');

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //for solving certificate issue
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERPWD, $login['username'] . ':' . $login['password']);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStringPOST);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $resultPOST = curl_exec($ch);

    if($resultPOST === false)
    {
        var_dump('Curl error: ' . curl_error($ch));

    } 

?>

我得到的错误是这样的:

'Curl error: error: 1408D13A:SSL routines: SSL3_GET_KEY_EXCHANGE:unable to find ecdh parameters.

好吧,当我尝试通过 chrome 的 POSTMAN 应用程序将数据发布到服务器时,我能够得到响应。 我无法在 php 中使用 CURL 找到此问题的解决方案。 任何建议或答案都将是非常可观的。

谢谢。

【问题讨论】:

  • 您是否尝试过使用 cacert.pem 发出 curl 请求?另外,尝试添加用户代理,也可能添加引用者
  • 我对实施 cacert.pem 没有任何想法。如果您能进一步向我说明如何实现它,那将是可观的。

标签: php ssl curl ssl-certificate cakephp-2.0


【解决方案1】:

您可以download cacert.pem from here - 保存到您的站点,在根目录之外。

在 curl 请求中,您可以执行以下操作:

$cacert=realpath('/path/to/cacert.pem');
curl_setopt( $ch, CURLOPT_CAINFO, $cacert );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 1 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );

curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla-da-gorilla' );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );

【讨论】:

  • 即使在尝试了您的代码后,我也收到了通知和错误。注意: curl_setopt(): CURLOPT_SSL_VERIFYHOST 不再接受值 1,而是使用值 2。错误:'Curl 错误:错误:1408D13A:SSL 例程:SSL3_GET_KEY_EXCHANGE:找不到 ecdh 参数。
猜你喜欢
  • 2011-05-18
  • 2012-04-15
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多