请你帮忙!
我使用cURL发送帖子,但响应为空(布尔值为false)。如果我在浏览器上发布数据,只需按下https://www.example.com/myaccount/transfer.php?username=usernamer&password=pass&deposit=5
,浏览器就会显示以下结果:
1 0 success Your account has been deposited
。
当我看到浏览器源代码时,结果是:
<?xml version="1.0" encoding="utf-8"?>
<TransferResponse>
<version>1</version>
<result>0</result>
<resultstring>success</resultstring>
<description>Your account has been deposited</description>
</TransferResponse>
让我附上我的cURL代码:
<?php
$config = array
(
"url" => "https://www.example.com/myaccount/",
"transfer" => "transfer.php",
"browser" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16"
);
$postFields = "username=username&password=pass&deposit=5";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config['url'] . $config['transfer']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cert/GeoTrustGlobalCA.crt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $config['browser']);
curl_setopt($ch, CURLOPT_REFERER, $config['url']);
curl_setopt($ch, CURLOPT_HEADER, true);
$content = curl_exec($ch);
var_dump($content);
var_dump(curl_getinfo($ch));
curl_error($ch);
curl_close($ch);
echo $content;
?>
请帮助我在cURL中获得结果。我尝试了很多方法。我已经连续两天上网了。最后我决定问这里。有人能弄明白问题是什么吗?以下是:
http
(而不是https)的结果显示为xml。https
(非http)的结果如下:
失败:错误号码:60。原因:SSL证书问题,请验证CA证书是否正常。细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 http
(非https)的cURL结果只是重定向www.example.com的警告页面 var_dump($content); and var_dump(curl_getinfo($ch));
结果是:
布尔值假 数组(大小= 26) 'url'=&gt;字符串'https://www.example.com/myaccount/transfer.php'(长度= 46) 'content_type'=&gt;空值 'http_code'=&gt; int 0 'header_size'=&gt; int 0 'request_size'=&gt; int 0 'filetime'=&gt; int -1 'ssl_verify_result'=&gt; int 0 'redirect_count'=&gt; int 0 'total_time'=&gt;漂浮1.451 'namelookup_time'=&gt;漂浮0 'connect_time'=&gt;漂浮0 'pretransfer_time'=&gt;漂浮0 'size_upload'=&gt;漂浮0 'size_download'=&gt;漂浮0 'speed_download'=&gt;漂浮0 'speed_upload'=&gt;漂浮0 'download_content_length'=&gt;浮点-1 'upload_content_length'=&gt;浮点-1 'starttransfer_time'=&gt;漂浮0 'redirect_time'=&gt;漂浮0 'certinfo'=&gt; 数组(大小= 0) 空 'primary_ip'=&gt;字符串'177.70.43.10'(长度= 11) 'primary_port'=&gt; int 443 'local_ip'=&gt;字符串'192.168.11.9'(长度= 0) 'local_port'=&gt; int 0 'redirect_url'=&gt;字符串''(长度= 0)
答案 0 :(得分:1)
如果这个
SSL证书问题,验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
是你的问题,curl_setopt()
setting
CURLOPT_SSL_VERIFYPEER
可能适合你:
FALSE阻止cURL验证对等方的证书。备用 可以使用指定要验证的证书 可以使用CURLOPT_CAINFO选项或证书目录指定 CURLOPT_CAPATH选项。
所以设置
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
也可能
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
答案 1 :(得分:1)
将SSL验证设置为false会破坏SSL的目的。 一个合适的解决方案是为CURL设置CA证书。
解决方案1(对PHP.ini的更改):
将curl.ca_info选项设置为指向cacert.pem的位置
Example: curl.ca_info="C:\xampp\cacert.pem"
重启Apache
解决方案2(在每次CURL调用之前设置选项)
编写以下代码:
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto\cacert.pem");
来源:http://tumblr.wehavefaces.net/post/52114563111/environment-windows-xampp-curl-library