News新闻

业界新闻动态、技术前沿
Who are we?

您的位置:首页      乐道系统FAQ      PHP对CURL函数的使用

PHP对CURL函数的使用

标签: 发布日期:2014-03-17 00:00:00 693

PHP在LINUX上可以利用CURL程序进行一些http的交互,甚至包括网站登录,POST请求等。当然要求系统带CURL,其次版本还要7以上,具体可参考手册。

首先看下最简单的获取一个HTTP页面的写法:

 


$url = "http://www.163.com"//以163为例
$session = curl_init($url);

curl_exec(
$session);

if (curl_errno($session))  //出错处理
    echo curl_error($session);
curl_close(
$session);

 

功能就是GET 163的主页。然后更进一步,使用curl_setopt函数做些调整。

然后看个复杂点的,作用是登录网站。

 


$url = "http://www.abc.com/login.php";
$postargs = "name=jack&password=123456";

$session = curl_init($url);
    
//设置postargs参数,就POST出去

curl_setopt(
$session, CURLOPT_POST, true);
curl_setopt(
$session, CURLOPT_POSTFIELDS, $postargs);


//是否返回header信息,一般可用于检查http返回状态值
curl_setopt($session, CURLOPT_HEADER, true);

//使用cookie,可以用于登录操作,注意需要对应的目录权限
curl_setopt($session,CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt(
$session,CURLOPT_COOKIEJAR, "cookie.txt");

//将返回结果写入变量
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($session);

if (curl_errno($session)) {
    
echo curl_error($session);
}

curl_close(
$session);

//输出结果,在这之后可以相应的parse自己需要的东西
echo $ret;

 

需要注意的就是header头,我们可以用来检查HTTP状态结果,例如服务器返回302让客户端做跳转等的操作。另外还可以发送HEADER信息,用来认证。

CURL还能用于并发操作,多线程的并发,比C#那个伪的强哦。。并发处理的例子:

 


$url1 = "http://www.abc.com/test1.php";
$url2 = "http://www.abc.com/test2.php";

$cl1 = curl_init();  //初始化2个用于线程操作的
$cl2 = curl_init();

curl_setopt(
$cl1,CURLOPT_URL,$url1);
curl_setopt(
$cl2,CURLOPT_URL,$url2);

//继续用cookie文件,假设我们刚才已经登录,需要保持会话的话
curl_setopt($cl1, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$cl1, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt(
$cl1, CURLOPT_COOKIEJAR, "cookie.txt");

curl_setopt(
$cl2, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$cl2, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt(
$cl2, CURLOPT_COOKIEJAR, "cookie.txt");

$mh = curl_multi_init(); //主要靠这个初始化多线程的

curl_multi_add_handle(
$mh,$cl1);
curl_multi_add_handle(
$mh,$cl2);

$running = null;
do{
    curl_multi_exec(
$mh,$running);
while($running > 0); //跑完后running会被置0

//获取返回结果

$ret = array();
$ret[] = curl_multi_getcontent($cl1);
$ret[] = curl_multi_getcontent($cl2);

//关闭
curl_multi_remove_handle($mh,$cl1);
curl_multi_remove_handle(
$mh,$cl2);

curl_multi_close(
$mh);

 

说明一下,这里继续用到cookie,可以让CURL在发送请求的同时把cookie的内容也header上去,这样就保持了会话。多个并发的操作其实也类似,就是把几个分别设置完,然后一起加到multi那个函数里,然后一并发送。

 


 

补充:

使用代理的方法,可以通过