[英]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.