2

嘿,我正在尝试卷曲“ https://www.libertyreserve.com/captcha.jpg
,所以我尝试卷曲它,但结果是“1x1” Gif Pic
然后我意识到该网站需要来自登录页面的 cookie显示我使用的有效验证码功能

$file['cookie'] = "cookie.txt";
function cURL_Page($url='',$var=''){
    global $file;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT,20);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31');
    curl_setopt($curl, CURLOPT_REFERER, "http://www.libertyreserve.com/en/login");
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    if($var) {
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $var);
    }
    curl_setopt($curl, CURLOPT_COOKIE,$file['cookie']);
    curl_setopt($curl, CURLOPT_COOKIEFILE,$file['cookie']);
    curl_setopt($curl, CURLOPT_COOKIEJAR,$file['cookie']);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 3);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
}

然后我 cURL 登录页面

$LoginPage = cURL_Page("https://www.libertyreserve.com/en/login");

然后卷曲PIC并放置标题并打印它

$ImageCode = cURL_Page("https://www.libertyreserve.com/captcha.jpg");
header("Content-Type: image/gif");
echo $ImageCode;

但结果仍然是“1x1”,因为 curl 函数不保存;不保存 cookie
ps:带有“Content-Type:image/gif”的站点响应,我把它放在标题中

4

1 回答 1

1

很少观察

  • 您没有正确分享cookie您不需要的原因CURLOPT_COOKIE
  • 即使 SSL 验证是错误的 .. 您需要添加认证信息,请参阅Code does not work without disable SSL on how that can done

这是一个工作代码

$ch = new SharedCurl(__DIR__ . "\libertyreserve.crt");

try {
    $ch->get('https://www.libertyreserve.com/en/login');
    $image = $ch->get('https://www.libertyreserve.com/captcha.jpg');
    header("Content-Type: image/gif");
    echo $image;
} catch (Exception $e) {
    print $e->getMessage();
}

输出

在此处输入图像描述

使用的类

class SharedCurl {
    private $ch;
    private $info;

    function __construct($cert) {
        $this->cookie = tempnam("/tmp", "CURLCOOKIE");
        $this->cert = $cert;
        if (! is_file($this->cert)) {
            throw new Exception("Can't find Certificate");
        }
    }

    function get($url) {
        $this->ch = curl_init($url);
        $this->shared();
        $responce = curl_exec($this->ch);
        $this->info = curl_getinfo($this->ch);

        if (curl_errno($this->ch)) {
            throw new Exception(curl_error($this->ch));
        }
        curl_close($this->ch);
        return $responce;
    }

    function shared() {
        curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, 20);
        curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31');
        curl_setopt($this->ch, CURLOPT_REFERER, "http://www.libertyreserve.com/en/login");
        curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookie);
        curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookie);
        curl_setopt($this->ch, CURLOPT_CAINFO, $this->cert);
        curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
    }
}

使用的证书文件

于 2013-05-21T16:45:31.490 回答