2010年10月

curl cookie和post用法

1. 2./*
3.#利用cookie和post用法
4.*/
5.
6.$ch = curl_init();
7.curl_setopt($ch, CURLOPT_COOKIEJAR, "E:/sq/curl/cookie.txt");
8.curl_setopt($ch, CURLOPT_URL,"http://www.nbchem.com/user/login.php");
9.curl_setopt($ch, CURLOPT_POST, 1);
10.curl_setopt($ch, CURLOPT_POSTFIELDS, "user=yourname&password=pwd&act=1");
11.
12.ob_start(); // prevent any output
13.curl_exec ($ch); // execute the curl command
14.ob_end_clean(); // stop preventing output
15.
16.curl_close ($ch);
17.unset($ch);
18.
19.$ch = curl_init();
20.curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
21.curl_setopt($ch, CURLOPT_COOKIEFILE, "E:/sq/curl/cookie.txt");
22.curl_setopt($ch, CURLOPT_URL,"http://www.nbchem.com/vip/");
23.
24.$buf2 = curl_exec ($ch);
25.
26.curl_close ($ch);
27.echo $buf2;
28.//echo "

".htmlentities($buf2)."


";
29.?>
用处:保留cookie

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

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

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($ack, CURLOPT_PROXY, $tor);
curl_setopt($ack, CURLOPT_URL, $url);
curl_setopt($ack, CURLOPT_HEADER, 0);
curl_setopt($ack, CURLOPT_USERAGENT, $agent);
curl_setopt($ack, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ack, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ack, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ack, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$result = curl_exec($ack);
curl_close($ack);
return $result;
}
?>

iis下url重写

方案一:使用isApi_rewrite
优点: 使用性很广
不足: 会修改REQUEST_URI, MVC程序框架如果像我一样依托这个值,那么有很大问题。
解决方法: isApi_rewrite下会多一个'HTTP_X_REWRITE_URL', 即为修改前的REQUEST_URI值

方案二: 使用URL Rewriting (网上资料看来行,到时项目用用)
URL Rewrite Module http://www.iis.net/expand/URLRewrite

重写规则看起来很兼容apache,非常喜欢

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php [NC,L]

apache这样调用header中的参数值:

apache这样调用header中的参数值:
%{User-Agent}
%{Referer}
nginx在这一点上略有不同:
$http_user_agent
$http_referer

有四点不同:
1、前缀不同(%和$)
2、nginx在引用header参数时需要加上"http_"前缀
3、nginx变量名全部小写,大小写不敏感
4、nginx只支持下划线,header中参数的key如果包含横线(-),在nginx中以下划线(_)替代

nginx直接把横线改为下划线来处理。

在记录log时,或者nginx给fastcgi传递参数时有用。