【问题标题】:PHP Curl & HTTPS not workingPHP Curl & HTTPS 不工作
【发布时间】:2017-10-31 18:27:33
【问题描述】:

所以我使用 PHP 和 Curl 试图下载 https weburl(来自https://www.g2crowd.com)但它不起作用,这是我到目前为止的代码一个简单的 curl 和另一个更高级的 curl ,两者都无法正常工作。 :(

// connect via SSL, but don't check cert
$ch=curl_init('https://www.g2crowd.com');
curl_setopt ($ch, CURLOPT_CAINFO, "cacert.pem");
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);  

$content = curl_exec($ch);

echo $content; // show target page
$ckfile = tempnam ("/tmp", 'cookiename');

$url='https://www.g2crowd.com/';
//$url='https://www.google.com';

$ch = curl_init();
curl_setopt( $ch, CURLOPT_COOKIESESSION, true );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $ckfile );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $ckfile ); 

curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$headers = [
'Host: www.g2crowd.com',
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Accept-Encoding: gzip, deflate'    
];
curl_setopt($ch, CURLOPT_CAINFO, 'C:\Users\ivan\Downloads\cacert.pem');

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_REFERER, "https://www.g2crowd.com/users/c190d528-ab02-4cb5-8467-9362ceaec290");

curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$server_output = curl_exec ($ch);
if(curl_error($ch))
{
    echo curl_error($ch);
}
else {
    echo 'eureka!';
}

curl_close ($ch);

我试图捕捉 curl 错误,所以这是错误:

1407742E:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 警报协议版本

请帮帮我!

谢谢!!

【问题讨论】:

  • $i 设置在哪里(和什么)? (见第 18 行。)
  • 嘿 cHa 好点!那是我尝试循环遍历各种 ssl 协议时的调试遗留问题,但即便如此,当我设置或删除该参数时 - 它仍然返回错误。

标签: php curl https


【解决方案1】:

您的openssl 程序已过期。我也在 OSX 本机版本上看到了这一点。如果您使用的是 Mac,则需要下载不同的 openssl。或者,使用 0 打开 SSL 意味着您打开时没有使用 SSL。

【讨论】:

  • 福布斯非常感谢您。我在 Windows 7 机器上的 Zend Studio 内使用 Zend Studio 13 IDE php 调试器。那么这个 OpenSSL 是我需要在 Windows 上安装或修改 php.ini 或其他东西的程序吗?我也安装了 Wamp,我应该尝试在 Wamp 本地 php 服务器上运行脚本吗?
【解决方案2】:

这应该可以解决您的问题:

$url='https://www.g2crowd.com/';

$ch = curl_init();

curl_setopt( $ch, CURLOPT_AUTOREFERER, TRUE );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, TRUE );

$server_output = curl_exec( $ch );

curl_close( $ch );

如果这不起作用,请尝试:

$url='https://www.g2crowd.com/';
$server_output = file_get_contents( $url );

【讨论】:

  • 感谢 Ben 的帮助!它可能只是我的 PHP 调试器,但它不工作,我假设你尝试过它并且它为你工作?如果你测试过它并且它有效,请告诉我。
  • @IvanSimic 问题几乎肯定出在您设置 PHP(或至少其 SSL 库)的方式上。但这很难远程解决。一般来说,我给出的 curl 选项可以治愈很多弊病。尝试我提供的第二个选项。它可能会奏效。
  • 已解决,我在 Wamp 服务器上尝试过,但这次出现了不同的 curl 错误:“检查 ssl 证书”,所以在谷歌上搜索解决方案,在 wamp 服务器上尝试过,它成功了。添加此代码解决了它: curl_setopt($ch, CURLOPT_CAINFO, 'C:\Users\ivan\Downloads\cacert.pem');
  • @IvanSimic 太棒了!
  • 你好,你的 curl 解决方案结果为空,file_get_contents 结果出了点问题
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多