簡體   English   中英

空字符串響應curl PHP在https發布

[英]Empty string response curl php on https posting

在HTTPS API上發布收到空響應。 在使用HTTP之前,一切正常。 但是上周,當第三方公司將鏈接更改為HTTPS時,一切都變了。 我沒有收到使用HTTP收到的實際消息。 我對此進行了一些研究,發現php curl無法讀取安全連接??? 我請第三方公司提供他們在HTTPS中擁有的證書,以便我可以將其包括在工作源代碼中(如下),並測試是否可以收到任何響應,但是失敗了! 這是我下面的源代碼。 有人可以幫我嗎? 謝謝

更新包括標題

$headers = array(
// "Accept-Encoding: gzip, deflate",
"Content-Type: text/xml;charset=\"UTF-8\"",
"SOAPAction: \"http://tempuri.org/IAppMain/Post\"",
"Connection: Keep-Alive",
"Content-length: ".strlen($xml_post_string),
 ); 


$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, false); 
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($soap_do, CURLOPT_CAINFO, APPPATH . "/RSA/BC/sslcertificateof.pem");
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);
curl_setopt($soap_do, CURLOPT_HEADER,         false);

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

if(curl_errno($soap_do))
{
    echo "Curl Failed: " . curl_errno($soap_do), "<br/>";
    echo curl_error($soap_do); 
} else {
    $dom = new DOMDocument();
    $dom->loadXML($response);   // Suppose if there's no error I will see an XML, but I get empty string.
}

您可以嘗試將其添加到php.ini

curl.cainfo=c:\path\to\cacert.pem

並設置curl_setopt_array

$options = array(
    CURLOPT_RETURNTRANSFER => true,     // return web page
    CURLOPT_HEADER         => false,    // don't return headers
    CURLOPT_FOLLOWLOCATION => true,     // follow redirects
    CURLOPT_ENCODING       => "",       // handle all encodings
    CURLOPT_USERAGENT      => "spider", // who am i
    CURLOPT_AUTOREFERER    => true,     // set referer on redirect
    CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
    CURLOPT_TIMEOUT        => 120,      // timeout on response
    CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
    CURLOPT_SSL_VERIFYPEER => false     // Disabled SSL Cert checks
);
curl_setopt_array( $soap_do, $options );

在評論中給我您的結果。

嘗試將CURLOPT_SSL_VERIFYPEER更改為0
同時,嘗試將CURLOPT_FOLLOWLOCATION初始設置為FALSE,這樣就可以100%確定要調試的連接過程的哪一部分。
最后:使用Fiddler之類的工具來監控流量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM