我正在尝试使用Ajax
发送cURL PHP
请求但是它会出错
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
,第四个参数无关紧要{{ 1}}和第五个是it's for cookie file
根据此命令data o post
UBUNTU 14.10
而cURL Version
为curl 7.37.1
与/usr/bin/curl -V
请帮忙
答案 0 :(得分:0)
我认为您遇到问题的原因是与您通信的服务器不支持您的SSL协议。
此处有一个页面,其中包含以下信息:http://blog.techstacks.com/2010/03/3-common-causes-of-unknown-ssl-protocol-errors-with-curl.html
有关更直接的信息,请尝试查看API文档以获取其服务器所需的连接协议。他们可能提供了一个可以连接的样本。
答案 1 :(得分:0)
这台服务器坏了。它不支持最兼容的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
应该工作。