首页技术curl_exec?PHP中的curl_exec

curl_exec?PHP中的curl_exec

编程之家2023-11-01172次浏览

其实curl_exec的问题并不复杂,但是又很多的朋友都不太了解PHP中的curl_exec,因此呢,今天小编就来为大家分享curl_exec的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

curl_exec?PHP中的curl_exec

使用curl实现多线程

<?php

/*

curl多线程抓取

*/

curl_exec?PHP中的curl_exec

/**

* curl多线程

*

curl_exec?PHP中的curl_exec

*@param array$array并行网址

*@param int$timeout超时时间

*@return array

*/

functionCurl_http($array,$timeout){

$res=array();

$mh= curl_multi_init();//创建多个curl语柄

$startime= getmicrotime();

foreach($arrayas$k=>$url){

$conn[$k]=curl_init($url);

curl_setopt($conn[$k], CURLOPT_TIMEOUT,$timeout);//设置超时时间

curl_setopt($conn[$k], CURLOPT_USERAGENT,'Mozilla/5.0(compatible; MSIE 5.01; Windows NT 5.0)');

curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);//HTTp定向级别

curl_setopt($conn[$k], CURLOPT_HEADER, 0);//这里不要header,加块效率

curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1);// 302 redirect

curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER,1);

curl_multi_add_handle($mh,$conn[$k]);

}

//防止死循环耗死cpu这段是根据网上的写法

do{

$mrc= curl_multi_exec($mh,$active);//当无数据,active=true

}while($mrc== CURLM_CALL_MULTI_PERFORM);//当正在接受数据时

while($activeand$mrc== CURLM_OK){//当无数据时或请求暂停时,active=true

if(curl_multi_select($mh)!=-1){

do{

$mrc= curl_multi_exec($mh,$active);

}while($mrc== CURLM_CALL_MULTI_PERFORM);

}

}

foreach($arrayas$k=>$url){

curl_error($conn[$k]);

$res[$k]=curl_multi_getcontent($conn[$k]);//获得返回信息

$header[$k]=curl_getinfo($conn[$k]);//返回头信息

curl_close($conn[$k]);//关闭语柄

curl_multi_remove_handle($mh,$conn[$k]);//释放资源

}

curl_multi_close($mh);

$endtime= getmicrotime();

$diff_time=$endtime-$startime;

returnarray('diff_time'=>$diff_time,

'return'=>$res,

'header'=>$header

);

}

//计算当前时间

functiongetmicrotime(){

list($usec,$sec)=explode("",microtime());

return((float)$usec+(float)$sec);

}

//测试一下,curl三个网址

$array=array(

" http://www.weibo.com/",

" http://www.renren.com/",

" http://www.qq.com/"

);

$data= Curl_http($array,'10');//调用

var_dump($data);//输出

?>

PHP中的curl_exec

curl_exec

(PHP 4>= 4.0.2, PHP 5) curl_exec—执行一个cURL会话

可以参考官方网站范例:http://www.php.net/manual/en/function.curl-exec.php

你要用CURL,就跟Session一样,要先初始化 curl_init(),不然PHP部会知道该怎麼运作。初始化完成之後就要开始设定参数,就像是要不要显示出来。当你参数设定完毕,就要开始执行这个CURL。最後就要关闭这个CURL。这就算是一个简单的CURL运用,当然还有更多变化。

实际例子:

<?php

//创建一个cURL资源

$ch=curl_init();

//设置URL和相应的选项

curl_setopt($ch,CURLOPT_URL,"

);

curl_setopt($ch,CURLOPT_HEADER,0);

//抓取URL并把它传递给浏览器

curl_exec($ch);

//关闭cURL资源,并且释放系统资源

curl_close($ch);

?>

如使用mysql一样,首先,我们必须先建立一个「curl」的连线,也因此,必须使用到 curl_init()这个函式。而为了怕建立连线忘了关闭。因此,必须先写好关闭的函式,curl_close($ch)。

不过大部分HTML标签都可以抓下来,并且显示,可是有部分可能与资料加密性或是转址的部分,就无法正常显示。

/建立CURL连线

$ch=curl_init();

//设定撷取的URL网址

curl_setopt($ch,CURLOPT_URL,"

);

curl_setopt($ch,CURLOPT_HEADER,false);

//将curl_exec()获取的讯息以文件流的形式返回,而不是直接输出。

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//执行

$temp=curl_exec($ch);

//关闭CURL连线

curl_close($ch)

加上curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);之後,他会将curl_exec()获取的讯息以文件流的形式返回传给$temp,而不是直接输出。如果要显示出画面的话就加上 echo$temp;就可以了。

下面先分享一个比较常用的,传递参数的部分。

简易的使用语法(GET):

//建立CURL连线

$ch=curl_init();

//设定撷取的URL网址

curl_setopt($ch,CURLOPT_URL,"

);

curl_setopt($ch,CURLOPT_HEADER,false);

//将curl_exec()获取的讯息以文件流的形式返回,而不是直接输出。

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//执行

$temp=curl_exec($ch);

//关闭CURL连线

curl_close($ch)

Get参数可以直接在网址传递例如网址後面加的?SomeVar=test,但是一旦资料量很大,用POST送还是比较适合。

简易的使用语法(POST):

//建立CURL连线

$ch=curl_init();

//设定撷取的URL网址

curl_setopt($ch,CURLOPT_URL,"

);

curl_setopt($ch,CURLOPT_HEADER,false);

//将curl_exec()获取的讯息以文件流的形式返回,而不是直接输出。

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//设定要传的变数A=值A&变数B=值B(中间要用&符号串接)

$PostData="a=abc&b=def";

//设定CURLOPT_POST为1或true,表示要用POST方式传递

curl_setopt($ch,CURLOPT_POST,1);

//CURLOPT_POSTFIELDS後面则是要传接的POST资料。

curl_setopt($ch,CURLOPT_POSTFIELDS,$PostData);

//执行

$temp=curl_exec($ch);

//关闭CURL连线

curl_close($ch)

以上的传递方式在某些状况下很好用,譬如说,没有设计完整的会员申请系统,就可以利用上面这些程式码,做一个自动注册申请机

curl_exec返回的是什么类型

curl_exec返回的是json类型的数据,接收返回的结果后再转换成正常的数据。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

在php中,curl_exec响应速度非常慢

最简便的方法是用ip地址代替域名进行测试,如果有改进就是说明网络域名服务器配置有问题,多换几个DNS来尝试。

php有个非常非常重要的函数叫做curl_getinfo,请查一下这个函数的手册说明,能够有效地把每一步操作所消耗的时间都分析出来,帮助你锁定瓶颈,缩小问题范围

永远都不要用windows当服务器。LAMP就是指的 Linux+ Apache+ MySQL+ PHP,黄金组合,非常稳定非常可靠。

非常感谢您的阅读!我们希望本文对于解决您关于curl_exec的问题提供了一些有价值的信息。如果您还有其他疑问,我们将很乐意为您提供进一步的帮助。

美国多ip站群vps,美国站群服务器选择哪家机房比较好asp.net下载(一个关于asp.net(c#)下载文件的问题)