设为首页 加入收藏

TOP

详解php的curl几个函数(一)
2017-10-10 11:55:04 】 浏览:10114
Tags:详解 php curl 函数

  关于php的curl一系列函数,这里解释一下它们的作用。

  在html中,我们可以通过form设置http的post和get提交,但假如我们获取的数据不是从html中来的,而是php脚本主动向其他服务器提交呢?这个时候,我们应该怎么实现post和get提交数据呢?答案就是php的curl函数或者stream_context_create函数,还有fsockopen函数等等方式,这里讲一下curl的提交设置,其他两种有时间会写一下。

  curl的函数实现http提交,关键就在四个函数:

    一个是:curl_init()

    作用:初始化curl的``套接流``

    第二个是:curl_setopt()

    作用:设置http提交参数

    第三个是:curl_exec()

    作用:执行curl ``套接流`` 的提交,并获取服务器返回的内容

    第四个:curl_close()

    作用:关闭已经实现http提交目的的``套接流``

    说是说四个函数,但实际的应用中,其实,就是设置curl_setopt这个函数的参数而已,其他三个都是跑龙套的,呵呵。

    不相信,下面我们举一个例子来利用curl系列函数实现http提交,不罗嗦了,直接上代码:

  

<?php /* *创建一个curl_init提交函数,模拟get提交,模拟post提交,模拟json提交 *$url 提交的服务器地址,必须 *$data 提交的数据,必须,是关联数组, *$method 提交的方式,必须,默认get提交,选项值,只能填get、post、json *$options 其他选项,可有可以无,如果设置了,不能设置CURLOPT_URL,必须符合curl_setopt_array()的参数语法 *如果失败则返回false,提交数据成功,则返回服务器返回的结果 */
function curl($url='',$data=array(),$method='get',$options=array()){ //验证数据传进来的数据是否合法
    if(empty($url) || !filter_var($url,FILTER_VALIDATE_URL)){ return false; } if(!is_array($data) && empty($data)){ return false; } $method = strtolower($method); if(!in_array($method,array('get','post','json'))){ return false; } //初始化curl句柄,
    $ch = curl_init(); //设置服务器返回的数据不直接输出,而是保留在curl_exec()的返回值中
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); if(!empty($options) && is_array($options)){ if(curl_setopt_array($ch,$options) == false){ return false; } } switch($method){ case 'get':
            //把要提交的数据转换为get键值对提交
            $data = http_build_query($data); curl_setopt($ch,CURLOPT_URL,$url.'?'.$data); //获取curl执行后,服务器返回的结果
            $return = curl_exec($ch); curl_close($ch); return $return; break; case 'post': curl_setopt($ch,CURLOPT_URL,$url); //设置post提交
            curl_setopt($ch,CURLOPT_POST,true); //提交post的数据
            curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $return = curl_exec($ch); curl_close($ch); return $return; break; case 'json':
            //设置json提交的数据
            $data = json_encode($data); curl_setopt($ch,CURLOPT_URL,$url); //设置post提交
            curl_setopt($ch,CURLOPT_POST,true); //json的数据通过post的方式提交
            curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $return = curl_exec($ch); curl_close($ch); return $return; break; default:
            return false; break; } } $url = "http://www.test.com/curl_setopt/upload.php"; //下面是测试,本人是测试成功了,我服务器是直接输出$_POST,$_GET
 $data  = array( 'name'  =>  'curl' , 'method' => 'post' ); $method ='post'; var_dump(curl($url,$data,$method));

 

  

    注意::这里::

     json数据提交,服务器必须以php://input获取,如file_get_contents('php://input');

     bool curl_setopt_array ( resource $ch , array $options )的参数举例:


     设置curl套接流$ch相应的选项

      $options = array(
      CURLOPT_SSL_VERIFYPEER => false,
      CURLOPT_HEADER => false
     );


     post和json,curl_setopt_array函数不能设置CURLOPT_POSTFIELDS,CURLOPT_POST这两项
     因为我这函数没有排除,要排除,你可以自己修改这个函数

 

     curl_setopt_array函数,其实也就是```批量```设置curl_setopt()函数的选项,

    他们的作用是一样的,我这里利用它,是为了方便


     post提交可以上传文件,但是文件的地址必须这样设置,下标为‘file’,地址前加@
     array('file' => '@D:\vhost\test\curl_setopt\xingxing.jpg')
    

    总结:

    假如上面的函数你看不懂,那不要紧,下面我给你解释一下,上面函数的主要意思:

    

    利用curl套接流实现http提交的设置步骤:

    首先:初始化curl

    这对应上面的第一个步骤:

//初始化curl句柄,
$ch = curl_init();

    其次:设置curl的参数,也就是设置http提交的参数,这对应上面的第二个步骤:

//把要提交的数据转换为get键值对提交
$data = http_build_query($data); curl_setopt($ch,CURLOPT_URL,$url.'?'.$data);

 

    http_build_query()这个函数的作用不过是把一个

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据类型和进制转换 下一篇php中导入导出excel的原理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目