在 PHP 上使用 SSL 卷曲

威廉·詹姆斯

我正在尝试将数据发送到使用 curl 并尝试捕获数据的外部服务器。问题是响应数据是加密的,我认为问题出在 curl 和 SSL。我尝试用 fiddler 进行捕获,当我解密数据时效果很好。我正在使用卷曲类。代码如下:

class curl {
    var $ch, $agent, $error, $info, $cookiefile, $savecookie;   
    function curl() {
        $this->agent = $this->get_agent(rand(0,44));
        $this->ch = curl_init();
        curl_setopt ($this->ch, CURLOPT_USERAGENT, $this->agent);
        curl_setopt ($this->ch, CURLOPT_HEADER, 1);
        curl_setopt ($this->ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt ($this->ch, CURLOPT_SSL_VERIFYHOST, 1);
        curl_setopt ($this->ch, CURLOPT_FOLLOWLOCATION,true);
        curl_setopt ($this->ch, CURLOPT_TIMEOUT, 30);
        curl_setopt ($this->ch, CURLOPT_CONNECTTIMEOUT,30);
    }
    function timeout($time){
        curl_setopt ($this->ch, CURLOPT_TIMEOUT, $time);
        curl_setopt ($this->ch, CURLOPT_CONNECTTIMEOUT,$time);
    }
    function ssl($veryfyPeer, $verifyHost){
        curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, $veryfyPeer);
        curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, $verifyHost);
    }
    function header($header) {
        curl_setopt ($this->ch, CURLOPT_HTTPHEADER, $header);
    }   
    function login($user, $pass) {
        curl_setopt ($this->ch, CURLOPT_USERPWD, "$user:$pass");
    }
    function cookies($cookie_file_path) {
        $this->cookiefile = $cookie_file_path;;
        $fp = fopen($this->cookiefile,'wb');fclose($fp);
        curl_setopt ($this->ch, CURLOPT_COOKIEJAR, $this->cookiefile);
        curl_setopt ($this->ch, CURLOPT_COOKIEFILE, $this->cookiefile);
    }
    function ref($ref) {
        curl_setopt ($this->ch, CURLOPT_REFERER,$ref);
    }   
    function socks($sock) {
        curl_setopt ($this->ch, CURLOPT_HTTPPROXYTUNNEL, true); 
        curl_setopt ($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); 
        curl_setopt ($this->ch, CURLOPT_PROXY, $sock);
    }
    function proxy($sock) {
        curl_setopt ($this->ch, CURLOPT_HTTPPROXYTUNNEL, true); 
        curl_setopt ($this->ch, CURLOPT_PROXY, $sock);
    }
    function post($url, $data , $hasHeader=true, $hasBody=true) {
        curl_setopt($this->ch, CURLOPT_HEADER, $hasHeader ? 1 : 0);
        curl_setopt($this->ch, CURLOPT_NOBODY, $hasBody ? 0 : 1);
        curl_setopt($this->ch, CURLOPT_POST, 1);    
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
        return $this->getPage($url);
    }
    function data($url, $data, $hasHeader=true, $hasBody=true) {
        curl_setopt ($this->ch, CURLOPT_POST, 1);
        curl_setopt ($this->ch, CURLOPT_POSTFIELDS, http_build_query($data));
        return $this->getPage($url, $hasHeader, $hasBody);
    }
    function get($url, $hasHeader=true, $hasBody=true) {
        curl_setopt ($this->ch, CURLOPT_POST, 0);
        return $this->getPage($url, $hasHeader, $hasBody);
    }   
    function getPage($url, $hasHeader=true, $hasBody=true) {
        curl_setopt($this->ch, CURLOPT_HEADER, $hasHeader ? 1 : 0);
        curl_setopt($this->ch, CURLOPT_NOBODY, $hasBody ? 0 : 1);
        curl_setopt ($this->ch, CURLOPT_URL, $url);
        $data = curl_exec ($this->ch);
        $this->error = curl_error ($this->ch);
        $this->info = curl_getinfo ($this->ch);
        return $data;
    }   
    function close() {
        unlink($this->cookiefile);
        curl_close ($this->ch);
    }
    function get_agent($z){
        switch ($z){
            case 0: $agent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0"; break;
            case 1: $agent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1"; break;
            case 2: $agent= "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";   break;
            case 3: $agent= "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";   break;
            case 4: $agent= "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)";   break;
            case 5: $agent= "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";  break;
            case 6: $agent= "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9a8) Gecko/2007100619 GranParadiso/3.0a8";  break;
            case 7: $agent= "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3"; break;
            case 8: $agent= "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325)";   break;
            case 9: $agent= "Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 6.0)";  break;
            case 10:    $agent= "Mozilla/4.0 (compatible; MSIE 5.5b1; Mac_PowerPC)";    break;
            case 11:    $agent= "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";  break;
            case 12:    $agent= "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; MS-RTC LM 8)";  break;
            case 13:    $agent= "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.30)";    break;
            case 14:    $agent= "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.1)";    break;
            case 15:    $agent= "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";    break;
            case 16:    $agent= "Mozilla/4.0 (compatible; MSIE 6.0; America Online Browser 1.1; rev1.5; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";   break;
            case 17:    $agent= "Mozilla/5.0 (X11; U; Linux; it-IT) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.4 (Change: 413 12f13f8)";    break;
            case 18:    $agent= "Mozilla/5.0 (X11; U; Linux; en-GB) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 239 52c6958)";    break;
            case 19:    $agent= "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.2 (Change: 189 35c14e0)";  break;
            case 20:    $agent= "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; Avant Browser; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";   break;
            case 21:    $agent= "Mozilla/5.0 (Windows; U; WinNT; en; rv:1.0.2) Gecko/20030311 Beonex/0.8.2-stable"; break;
            case 22:    $agent= "Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.1b1) Gecko/20060601 BonEcho/2.0b1 (Ubuntu-edgy)"; break;
            case 23:    $agent= "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.4pre) Gecko/20070521 Camino/1.6a1pre"; break;
            case 24:    $agent= "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/419 (KHTML, like Gecko, Safari/419.3) Cheshire/1.0.ALPHA";  break;
            case 25:    $agent= "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko/20021216 Chimera/0.6";  break;
            case 26:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.164.0 Safari/530.1";  break;
            case 27:    $agent= "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 1.1.4322; Crazy Browser 3.0.0 Beta2)"; break;
            case 28:    $agent= "Mozilla/5.0 (X11; U; Linux i686; en; rv:1.8.1.12) Gecko/20080208 (Debian-1.8.1.12-2) Epiphany/2.20";   break;
            case 29:    $agent= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1";   break;
            case 30:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031212 Firebird/0.7+";    break;
            case 31:    $agent= "Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.04 (jaunty) Firefox/3.5";    break;
            case 32:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3";    break;
            case 33:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 6.0; it; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9";  break;
            case 34:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5";  break;
            case 35:    $agent= "Mozilla/4.76 [en] (X11; U; Linux 2.4.9-34 i686)";  break;
            case 36:    $agent= "Mozilla/4.75 [fr] (WinNT; U)"; break;
            case 37:    $agent= "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.52 [en]";   break;
            case 38:    $agent= "Mozilla/4.0 (compatible; MSIE 6.0; ; Linux i686) Opera 7.50 [en]"; break;
            case 39:    $agent= "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081212 Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/4.0dp1 Safari/526.8";    break;
            case 40:    $agent= "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.8.0.2) Gecko/20060309 SeaMonkey/1.0"; break;
            case 41:    $agent= "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.7.6) Gecko/20050405 Epiphany/1.6.1 (Ubuntu) (Ubuntu package 1.0.2)";  break;
            case 42:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060731 Firefox/1.5.0.5 Flock/0.7.4.1"; break;          
            case 43:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.1 Safari/525.19 ";   break;
            case 44:    $agent= "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 ";    break;
        }
        return $agent;
    }
}

有人可以帮助我毫无问题地使用带有 SSL 的 curl 吗?

我正在尝试的主机的响应是这样的:

HTTP 响应

Fiddler 解码它,所以有什么问题?

塞克兹

尝试使用 gzip 编码:

curl_setopt($ch,CURLOPT_ENCODING, 'gzip');

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

curl_setopt($ch,CURLOPT_ENCODING, '');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章