【问题标题】:HTTPS request with Curl Failed: 0 but no response in Curl PHP带有 Curl 的 HTTPS 请求失败:0 但在 Curl PHP 中没有响应
【发布时间】:2017-10-06 16:02:37
【问题描述】:

我正在尝试使用 HTTPS 链接发出肥皂请求。 我得到 Curl Failed: 0 (这意味着没有错误)但是,我收到了一个空字符串。

$url = $soapUrl;

$soap_do = curl_init();
set_time_limit(0);
curl_setopt($soap_do, CURLOPT_URL,            $url);
curl_setopt($soap_do, CURLOPT_AUTOREFERER,    true);
curl_setopt($soap_do, CURLOPT_MAXREDIRS,      10);
curl_setopt($soap_do, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($soap_do, CURLOPT_POST,           true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $xml_post_string);
curl_setopt($soap_do, CURLOPT_VERBOSE,        TRUE);
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $headers);

$response = curl_exec($soap_do);
$error    = curl_error($soap_do);

var_dump($response);

echo "Curl Failed: " . curl_errno($soap_do), "<br/>";
echo curl_error($soap_do);

我的代码有问题吗?

【问题讨论】:

  • 使用curl_getinfo()查看有关您的请求结果的更多详细信息。
  • 你缺少像$output = curl_exec($soap_do);这样的东西
  • 我更新了我的代码,请仔细阅读

标签: php curl https


【解决方案1】:

你的curl_exec();在哪里?

您设置了大量选项,但我认为大多数选项只是用于微调。 你可以试试我在另一个答案中给出的这个例子:

Send an XML post request to a web server with CURL

编辑: PHP 还内置了一个 SOAP 客户端,也许你可以尝试一下:

    $context = stream_context_create([
        'http' => [
            'user_agent' => 'PHPSoapClient'
        ],
        'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        ]
    ]);

    $soap = new SoapClient($url, [
        'stream_context' => $context,
        'cache_wsdl' => WSDL_CACHE_NONE, // WSDL_CACHE_MEMORY
        'trace' => 1,
        'exception' => 1,
        'keep_alive' => false,
        'connection_timeout' => 500000
    ]);

    // Then call the SOAP method
    echo $soap->version();

【讨论】:

  • 您更新的代码对我来说很好用。也许您应该设置CURLOPT_SSL_VERIFYPEER false 或尝试在 SoapClient 中构建。查看我的更新答案
  • 是否需要证书才能访问 https 链接?
  • 我试过你更新的代码,但它拒绝,看到错误Fatal error: Class 'SoapClient' not found
  • 对于 SSL,您需要设置 verify_peer =&gt; trueallow_self_signed =&gt; false
  • SoapClient 需要安装 php soap 扩展。在基于 debian 的系统上,这就像“apt install php7.0-soap”一样简单
猜你喜欢
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
相关资源
最近更新 更多