我正在尝试使用curl发布到外部URL,外部页面使用https,这是我正在使用的服务器的desc
服务器Apache / 2.2.11(Win32)mod_ssl / 2.2.11 OpenSSL / 0.9.8k PHP / 5.3.0
外部网址重定向到我在帖子中发送的另一个网址,但每次我尝试我都会收到此错误
curl_errno = 35(与[安全网站]有关的未知SSL协议错误:443)
所以我检查一下萤火虫的反应并说出
无法加载:http://localhost/3Party/PHP_VPC_3Party_Auth_Capture_Order_DO.php
这是我正在使用的代码
ob_start();
// initialise Client URL object
$ch = curl_init();
// set the URL of the VPC
curl_setopt ($ch, CURLOPT_URL, $vpcURL);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $this->postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_exec ($ch);
if (curl_error($ch)) {
$this->errorMessage =
"curl_errno=". curl_errno($ch) . " (" . curl_error($ch) . ")";
}
curl_close ($ch);
答案 0 :(得分:6)
我认为问题在于您尝试在端口443上访问“http”URL(而不是“https”)。
您也可以尝试手动设置SSL版本:
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
将3替换为远程服务器正在使用的任何SSL版本。
答案 1 :(得分:2)
经过几个星期处理这个问题,我至少能够建立连接,我不知道它是否是真正的答案,但它适用于我,我只是添加到上面的例子,选项到使用代理,就像这样
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM );
curl_setopt($ch, CURLOPT_PROXY, 'my.proxy');
curl_setopt($ch, CURLOPT_PROXYPORT, 'my.port');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'domain\user:password');
希望这可以提供帮助
答案 2 :(得分:1)
服务器也可能是tls / ssl版本首选项。在这种情况下,您必须尝试从此处指定不同的版本常量:https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html
E.g。对我有用的是:
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);