在PHP中,Curl https xml结果返回空白(布尔值false)
请你帮忙! 我使用cURL发送帖子,但响应为空(布尔值为false)。如果我在浏览器上发布数据,就像按在PHP中,Curl https xml结果返回空白(布尔值false),php,xml,curl,Php,Xml,Curl,请你帮忙! 我使用cURL发送帖子,但响应为空(布尔值为false)。如果我在浏览器上发布数据,就像按https://www.example.com/myaccount/transfer.php?username=usernamer&password=pass&deposit=5浏览器显示以下结果: 1 0成功您的帐户已存款 当我看到浏览器源代码时,结果如下: <?xml version="1.0" encoding="utf-8"?> <TransferResponse>
https://www.example.com/myaccount/transfer.php?username=usernamer&password=pass&deposit=5
浏览器显示以下结果:
1 0成功您的帐户已存款
当我看到浏览器源代码时,结果如下:
<?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>
1.
0
成功
您的帐户已存入
让我附加my 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;
?>
请帮我查一下卷曲的结果。我试过很多方法。我已经连续两天上网了。最后我决定在这里提问。有人能找出问题所在吗?完成以下工作:
- 命令行将
(非https)的结果显示为xmlhttp
- 命令行返回https(非http)的结果如下: 失败:错误号:60。原因:SSL证书问题,请验证CA证书是否正常。细节: 错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败
- http(非https)的cURL结果只重定向www.example.com的警告页面
var_dump($content);和var_dump(curl_getinfo($ch))代码>结果为:
布尔假 数组(大小=26) “url'=>字符串“”(长度=46) “内容类型”=>null “http_代码”=>int 0 “标题大小”=>int 0 “请求大小”=>int 0 'filetime'=>int-1 “ssl验证结果”=>int 0 “重定向\u计数”=>int 0 “总时间”=>浮动1.451 “名称查找\u时间”=>浮点0 “连接时间”=>浮点0 “预传输时间”=>浮点0 'size_upload'=>float 0 'size_download'=>float 0 “速度下载”=>浮点0 “速度上传”=>浮点0 “下载内容长度”=>float-1 “上传内容长度”=>float-1 “开始传输时间”=>浮点0 “重定向\u时间”=>float 0 “certinfo”=> 数组(大小=0) 空的 '主ip'=>字符串'177.70.43.10'(长度=11) “主端口”=>INT443 'local_ip'=>字符串'192.168.11.9'(长度=0) “本地端口”=>int 0 '重定向\u url'=>字符串“”(长度=0)<?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>
- 如果
SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败
是你的问题吗
可能是给你的:
FALSE停止cURL验证对等方的证书。候补
可以使用指定要验证的证书
可以使用指定CURLOPT_CAINFO选项或证书目录
CURLOPT_CAPATH选项
这么定
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
也可能
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
将SSL验证设置为false会破坏SSL的用途。 正确的解决方案是为CURL设置CA证书 解决方案1(对PHP.ini的更改):
Example: curl.ca_info="C:\xampp\cacert.pem"
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto\cacert.pem");
来源:您能
回显(curl_error())
吗?这是curl错误:SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败。请帮帮我。非常感谢。证书可能有问题,浏览器可以忽略,但是curl不能。我会尝试在浏览器中找出问题所在-证书可能已过期,或对该域名无效。不确定是否可以告诉curl忽略证书问题在这种情况下我可以做些什么来解决问题?任何提示都会有帮助。如前所述,我会尝试在浏览器中找出证书的问题所在。浏览器可能正在某处显示消息。如果失败了,我会尝试用谷歌搜索php curl ignore certificate
,看看是否有什么有用的东西出现。我尝试了这两种组合。如果我将它们设置为false,那么站点将引用www.example.com/warning.html
page。字符串“HTTP/1.1 302查找日期:2013年1月29日星期二20:03:35 GMT服务器:Apache P3P:CP=“IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”过期时间:1981年11月19日星期四08:52:00 GMT缓存控制:无存储,无缓存,必须重新验证,后检查=0,pre-check=0 Pragma:无缓存位置:Vary:接受编码内容长度:0连接:关闭内容类型:text/html;charset=UTF-8这对我来说很好。这是在一个本地开发主机上,可能没有安装CA,所以这是一个快速修复,但不适用于生产环境。这对我有效:code
curl\u setopt($ch,CURLOPT\u SSL\u VERIFYPEER,false)/code
当这似乎没有什么区别时,您会怎么做,在代码的一部分调用同一个curl请求会给出有效的http_代码,从另一个文件调用会给出http_代码0?