2017-04-20 101 views
1

我正在运行PHP版本5.5.12作为WAMP的一部分。PHP CURL WAMP - SSL证书错误:无法获取本地发行者证书

当我尝试执行此代码,我发现了以下错误: SSL证书错误:无法获取本地颁发者证书 这个脚本的目的是得到认证的形式通过用户名和密码的内容。

<?php 

include('simple_html_dom.php'); 
ini_set('max_execution_time', 0); 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
ini_set('memory_limit', '2G'); 

class EmailScraping { 

    public $url; 

    public function __construct($url) { 
     if ($this->validUrl($url)) 
      $this->url = $url; 
     else { 
      echo 'bad url <br>'; 
     } 
    } 

    public function getContent() { 

     $username = "****"; 
     $password = "****"; 

     //login form action url 
     $url = 'https://placement.emploiquebec.gouv.qc.ca/mbe/login/portail/auth.asp?provenance=emplr&CL=french'; 
     $postinfo = "posted&L_OBLG_NOM_UTIL=Votre code d'utilisation&OBLG_NOM_UTIL=" . $username . "&L_OBLG_MOT_PASSE=Votre mot de passe&OBLG_MOT_PASSE=" . $password . "&continuer=CONTINUER&LastLogin&NbEssai=0"; 

     $cookie_file_path = "./cookies.txt"; 

     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_NOBODY, false); 
     curl_setopt($ch, CURLOPT_HEADER, false); 
     curl_setopt($ch, CURLOPT_ENCODING , ""); 
     curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
     //set the cookie the site has for certain features, this is optional 
     curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0"); 
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); 
     curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);   
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  
     curl_setopt($ch, CURLOPT_CAINFO, getcwd() . '\cacert.pem'); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);  
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo); 
     $html1 = curl_exec($ch); 
     curl_close($ch); 

     $ch = curl_init(); 

     //page with the content I want to grab 
     curl_setopt($ch, CURLOPT_URL, "https://placement.emploiquebec.gouv.qc.ca/mbe/ut/suivroffrs/esuivroffrs.asp?CL=french"); 
     curl_setopt($ch, CURLOPT_POST, false); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, ""); 
     $answer = curl_exec($ch); 

     if (curl_error($ch)) { 
      echo curl_error($ch); 
     } 

     curl_close($ch); 
     return $answer; 
    } 

    public function validUrl($url) { 

     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url)) { 
      return false; 
     } 
     return true; 
    } 

} 

$scraper = new EmailScraping('https://www.facebook.com'); 
$result = $scraper->getContent(); 
$html = "<base href='https://placement.emploiquebec.gouv.qc.ca/mbe/login/portail/auth.asp?provenance=emplr&CL=french' />" . $result; 
echo $html; 

我试图在php.ini文件中添加此代码并重新启动WAMP服务器,但仍然收到相同的错误。

curl.cainfo="C:/wamp/www/domscraper/cacert.pem" 

我真的不知道还有什么可以尝试的。

任何人都可以建议我还有什么可以尝试?

+0

是'curl.cainfo =“C:/wamp/www/domscraper/cacert.pem”'正确的路径/文件存在吗? –

+0

是这个路径/文件存在@Antonis Tsimourtos –

+0

也许尝试下载和替换[this](https://curl.haxx.se/ca/cacert.pem) –

回答

3

你有curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

尝试将其设置为false

下面是一些文档的链接 - http://php.net/manual/en/function.curl-setopt.php

这应该是唯一的发展,在督促你应该解决所有证书问题,可能会需要从提供商处获得证书/密钥。

有关错误日志添加(并检查了额外信息的文档)

$verbose = fopen ('php://temp', 'w+'); 
curl_setopt ($curlManager, CURLOPT_VERBOSE, true); 
curl_setopt ($curlManager, CURLOPT_STDERR, $verbose); 

您也可以尝试,如果没有必要的调试消除其中的一些选项。

+0

我试着用curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,假),但仍然得到同样的错误。我只是喜欢从登录表单传递用户名和密码的内容。请任何帮助。 –

+0

编辑答案以包含错误日志记录,而不是将其放入注释中。 – DaveCoast

0

这是韧皮配置:从 curl_setopt变化($ CH,CURLOPT_SSL_VERIFYPEER,TRUE); 至 curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false);

我一直在试图连接到由邮差做的API,它的工作原理。

我在Windows 64位上使用WAMP(PHP7 + Apache)。

相关问题