在PHP中,Curl https xml结果返回空白(布尔值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>

请你帮忙! 我使用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>
<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;

?>

请帮我查一下卷曲的结果。我试过很多方法。我已经连续两天上网了。最后我决定在这里提问。有人能找出问题所在吗?完成以下工作:

  • 命令行将
    http
    (非https)的结果显示为xml
  • 命令行返回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))结果为:

    <?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>
    
    布尔假 数组(大小=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)

    • 如果

      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的更改):

    • 从下载CA包(cacert.pem)
    • 将其放在本地系统上(例如:C:\xampp\cacert.pem)
    • 打开php.ini
    • 将curl.ca_info选项设置为指向cacert.pem的位置

      Example: curl.ca_info="C:\xampp\cacert.pem"
      
    • 重新启动Apache

    • 解决方案2(在每次CURL调用之前设置选项)

    • 从下载CA包(cacert.pem)
    • 将其放在本地系统上(例如: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?