PHP curl 抓取页面时的 cookie 问题

Posted on 28th October 2009 by Nio in 工作忙碌, 程序人生 - Tags: ,

使用 PHP curl 抓取页面时,可以设置 cookie 保存的文件,示例代码:


<?php
$cookie_path 'cookie.txt';
$ch curl_init();
curl_setopt($chCURLOPT_COOKIEFILE$cookie_path);
curl_setopt($chCURLOPT_COOKIEJAR$cookie_path);
//....
?>

特别需要注意的是,在完成抓取之后,需要把 cookie 文件删除,否则下次抓取时会自动使用原有的 cookie 数据,从而导致一些预想不到的错误(我们今天就被这个问题折腾了很久 :( )。

PHP 通过 Tor 代理实现多 IP 访问

Posted on 8th June 2009 by Nio in 程序人生 - Tags: , , ,

经常需要使用 PHP 写脚本来模拟浏览器对一些页面进行访问,但客户端 IP 却是个问题,所以考虑通过走代理的方式。Tor 无疑是一个很好的选择。通过 curl 相关函数,很容易就可以实现通过 tor 进行访问。


<?php
function tor($url)
{
    $ua = array('Mozilla','Opera','Microsoft Internet Explorer','ia_archiver');
    $op = array('Windows','Windows XP','Linux','Windows NT','Windows 2000','OSX');
    $agent  $ua[rand(0,3)].'/'.rand(1,8).'.'.rand(0,9).' ('.$op[rand(0,5)].' '.rand(1,7).'.'.rand(0,9).'; en-US;)';
    // Tor 地址与端口
    $tor '127.0.0.1:9050';
    // 连接超时设置
    $timeout 300;
    $ack curl_init();
    curl_setopt($ackCURLOPT_PROXY$tor);
    curl_setopt($ackCURLOPT_URL$url);
    curl_setopt($ackCURLOPT_HEADER0);
    curl_setopt($ackCURLOPT_USERAGENT$agent);
    curl_setopt($ackCURLOPT_RETURNTRANSFER1);
    curl_setopt($ackCURLOPT_FOLLOWLOCATION1);
    curl_setopt($ackCURLOPT_TIMEOUT$timeout);
    curl_setopt($ackCURLOPT_PROXYTYPECURLPROXY_SOCKS5);
    $result curl_exec($ack);
    curl_close($ack);
    return $result;
}
?>