2017-05-08 81 views
1

我试图使用HTTPS链接发出soap请求。 我得到卷曲失败:0(这意味着没有错误)但是,我收到一个空字符串。使用Curl的HTTPS请求失败:0但Curl中没有响应PHP

$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); 

我的代码有问题吗?

+0

使用'curl_getinfo()'查看关于请求结果的更多细节。 –

+0

您缺少''output = curl_exec($ soap_do);' – Hackerman

+0

我更新了我的代码请chewck – phpmeter

回答

0

您的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(); 
+0

我更新了我的代码,请检查] – phpmeter

+0

您的更新代码适合我。也许你应该设置'CURLOPT_SSL_VERIFYPEER false'或者尝试在SoapClient中构建。查看我的更新回答 – PKeidel

+0

我需要证书才能访问https链接吗? – phpmeter