我正在尝试使用 cURL PHP
发送Ajax
请求,但它给出了错误
Unknown SSL protocol error in connection
而我能够login
到同一台服务器。
我试过这个
curl_setopt( $ch, CURLOPT_SSLVERSION, 1 );
Ajax
请求是这样的
$header = array('Accept' => '*/*',
"X-Requested-With" => "XMLHttpRequest",
"Content-Type" => "application/x-www-form-urlencoded");
$data = array('ClientNumber=999999&OrderClass=ContractOrders&ShowAll=ContractOrders&ShowPerPage=500');
echo $page = Spider::spider($header, 'https://wfs.nursefinders.com/MasterConsole/displayorders.cfm?ShowAll=ContractOrders', 'https://wfs.nursefinders.com/MasterConsole/BuildOrderDisplaySection.cfm', FALSE, $data[0]);
请注意spider
函数中,第一个参数是header
,第二个是referrer
第三个参数是url to access
,第四个参数无关紧要it's for cookie file
,第五个参数是data o post
我正在使用UBUNTU 14.10
,cURL Version
根据此命令curl 7.37.1
/usr/bin/curl -V
与php phpinfo()
打印相同
请帮忙
我相信您问题的原因是您与之通信的服务器不支持您的 SSL 协议。
这里有一个页面,其中包含有关这方面的信息:http://blog.techstacks.com/2010/03/3-common-causes-of-unknown-ssl-protocol-errors-with-curl.html
有关更直接的信息,请尝试查看 API 文档,了解其服务器所需的连接协议。他们可能已经提供了一个可以连接的样本。
这个服务器坏得很厉害。它不支持最兼容的SSLv23握手,如果尝试握手,就会挂起。它仅支持显式 SSL 3.0 或 TLS 1.0 握手。通过查看 cURL 的源代码,在我看来,强制执行 TLS1.0+ 的所有变体都将进行 SSLv23 握手,而服务器无法做到:
-- curl-7.41.0/lib/vtls/openssl.c
1719 default:
1720 case CURL_SSLVERSION_DEFAULT:
1721 case CURL_SSLVERSION_TLSv1:
1722 case CURL_SSLVERSION_TLSv1_0:
1723 case CURL_SSLVERSION_TLSv1_1:
1724 case CURL_SSLVERSION_TLSv1_2:
1725 /* it will be handled later with the context options */
1726 req_method = SSLv23_client_method();
这只剩下使用不安全的SSL 3.0的选项,即
curl_setopt( $ch, CURLOPT_SSLVERSION, 3 );
虽然我没有PHP可以测试,但curl -1
与 命令行上的curl -3
确认1
的CURLOPT_SSLVERSION将不起作用,而3
应该工作。