资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

curl返回数据php curl获取返回数据

php 使用curl函数并附带参数传递,接收返回的数据并保存在变量中

$Data = array('user' = 'xiaoming');

创新互联公司从2013年成立,先为龙川等服务建站,龙川等地企业,进行企业商务咨询服务。为龙川企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,'');

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $Data);

$a = curl_exec($ch);

curl_close($ch);

print_r( $a );

在 php curl返回

给你个我写的curl方法。

/**

* curl模拟提交

* @param string $url 网址

* @param array/string $opt 提交参数

* @param string $header 取回的头信息

* @param string $redirect 是否重定向

* @param boolean $ssl 验证https证书

* @return [type] 返回信息

*/

function curl($url, $opt='GET', $header=null, $redirect=true, $ssl=false){

//初始化

$ch = curl_init($url);

//配置设置

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $ssl);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $ssl);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $redirect);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); #返回结果

curl_setopt($ch, CURLOPT_HEADER, true); #显示协议头

if(is_array($opt)){

//转小写

$opt = array_change_key_case($opt, CASE_LOWER);

//POST

if(isset($opt['type'])  strtoupper($opt['type'])=='POST'){

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, (isset($opt['data']) ? $opt['data'] : ''));

}

//User-Agent

if(array_key_exists('ua', $opt))

curl_setopt($ch, CURLOPT_USERAGENT, $opt['ua']);

//Header

if(array_key_exists('header', $opt)){

curl_setopt($ch, CURLOPT_HTTPHEADER, (array)$opt['header']);

}

//Cookie

if(array_key_exists('cookie', $opt))

curl_setopt($ch, CURLOPT_COOKIE, $opt['cookie']);

//Referer

if(array_key_exists('referer', $opt))

curl_setopt($ch, CURLOPT_REFERER, $opt['referer']);

}else{

//仅POST

if(strtoupper((string)$opt) == 'POST')

curl_setopt($ch, CURLOPT_POST, true);

}

$result = curl_exec($ch);

if(curl_errno($ch)){

$result = curl_error($ch);

}else{

//获取头长度

$length = curl_getinfo($ch, CURLINFO_HEADER_SIZE);

//取出头信息

$header = substr($result, 0, $length);

//去掉头信息

$result = substr($result, $length);

}

//释放

curl_close($ch);

return $result;

}

解析php中curl

php的multi_curl功能慎用 因为某些版本的curl和php的搭配有Bug 所以你调试过没问题的代码很可能在别的机器上不正确  

相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已 它们文档少 给的例子 更是简单的让你无从借鉴 我也曾经找了许多网页 都没见一个完整的应用例子 •curl_multi_add_handle •curl_multi_close •curl_multi_exec •curl_multi_getcontent •curl_multi_info_read •curl_multi_init •curl_multi_remove_handle •curl_multi_select 一般来说 想到要用这些函数时 目的显然应该是要同时请求多个url 而不是一个一个依次请求 否则不如自己循环去调curl_exec好了

步骤总结如下 第一步 调用curl_multi_init 第二步 循环调用curl_multi_add_handle 这一步需要注意的是 curl_multi_add_handle的第二个参数是由curl_init而来的子handle 第三步 持续调用curl_multi_exec 第四步 根据需要循环调用curl_multi_getcontent获取结果 第五步 调用curl_multi_remove_handle 并为每个字handle调用curl_close 第六步 调用curl_multi_close 这里有一个网上找的简单例子 其作者称为dirty的例子 (稍后我会说明为何dirty)

复制代码 代码如下: * Here s a quick and dirty example for curl multi from PHP tested on PHP RC CLI / FreeBSD */

$connomains = array( " " " );

$mh = curl_multi_init();

foreach ($connomains as $i = $url) {      $conn[$i]=curl_init($url);       curl_setopt($conn[$i] CURLOPT_RETURNTRANSFER );       curl_multi_add_handle ($mh $conn[$i]); }

do { $n=curl_multi_exec($mh $active); } while ($active);

foreach ($connomains as $i = $url) {       $res[$i]=curl_multi_getcontent($conn[$i]);       curl_close($conn[$i]); }

print_r($res);

整个使用过程差不多就是这样 但是 这个简单代码有个致命弱点 就是在do循环的那段 在整个url请求期间是个死循环 它会轻易导致CPU占用 % 现在我们来改进它 这里要用到一个几乎没有任何文档的函数curl_multi_select了 虽然C的curl库对select有说明 但是 php里的接口和用法确与C中有不同 把上面do的那段改成下面这样

复制代码 代码如下: do {                         $mrc = curl_multi_exec($mh $active);                 } while ($mrc == CURLM_CALL_MULTI_PERFORM);                 while ($active and $mrc == CURLM_OK) {                         if (curl_multi_select($mh) != ) {                                 do {                                         $mrc = curl_multi_exec($mh $active);                                 } while ($mrc == CURLM_CALL_MULTI_PERFORM);                         }                 }

因 为$active要等全部url数据接受完毕才变成false 所以这里用到了curl_multi_exec的返回值判断是否还有数据 当有数据的时候 就不停调用curl_multi_exec 暂时没有数据就进入select阶段 新数据一来就可以被唤醒继续执行 这里的好处就是CPU的无谓消耗没有 了

另外 还有一些细节的地方可能有时候要遇到 控制每一个请求的超时时间 在curl_multi_add_handle之前通过curl_setopt去做 curl_setopt($ch CURLOPT_TIMEOUT $timeout);

判断是否超时了或者其他错误 在curl_multi_getcontent之前用 curl_error($conn[$i]);

lishixinzhi/Article/program/PHP/201311/21124

php curl 返回空

一、使用curl调用远程PHP文件来获取相应数据

二、问题

调用远程的PHP文件后,print_r($result)死活打印不出来东西。

三、解决

原来是自己在远程PHP文件中使用了return返回json数据,改为了echo 后就可以了

害我浪费了几个小时时间,记录一下。


本文名称:curl返回数据php curl获取返回数据
转载源于:http://cdkjz.cn/article/ddsjjgj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220