您的位置:首页 > 职场人生

关于get与post传递参数容量大小限制区别以及curl函数与file_get_contents的区别(面试)

2018-02-06 21:15 806 查看
这里总结一下get与post请求的区别:

1. get根据浏览器的不同有所不同,但一般不超过1M;

2. post传递参数的上限是2G, 默认能传递的大小8M,关于能传递参数的长度限制可以在php.ini中配置,post_max_size = 长度。

3. get通过url地址传递参数,post是实体数据,可以通过表单提交大量信息。

在网上查阅了一些资料,现在把curl函数与file_get_contents的区别总结一下:

首先明白一点,file_get_contents()函数和curl函数都可以用来抓取远程内容,什么是抓取全程内容呢?个人理解是获取指定url地址所展示的内容,返回结果的形式类似于打开一个网页后,查看网页源代码显示的内容。file_get_contents()也可以用来读取一个文件里的内容,curl函数支持更多的协议,比如FTP,HTTP,HTTPS,FTPS等。php默认不支持curl功能,需要在php.ini文件里开启,具体配置是去掉 
;extension=php_curl.dll前面的分号,重启Apache即可。

1. curl函数的用法:

    使用curl发送url请求,大致分为四步:

    (1) 初始化curl会话

         $ch = curl_init();

    (2) 设置请求选项,应包含具体的url

          curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");

          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

          curl_setopt($ch, CURLOPT_HEADER, 0);

     (3) 执行一个curl会话并获取相关回复

           $response = curl_exec($ch);

     (4) 释放curl句柄,关闭一个curl会话

          cur_close($ch);

  2. curl函数可以进行错误处理

      在1中的第三步,可以增加以下代码:

      if ($response == false) {

            echo "错误信息为:" . curl_error($ch);       

 }

    3. 使用curl模拟发送post请求

        $url = "http://www.ltyflyme.com/post.php";

        $post_data = array(

  "name"
=> "lty",

"url" => "http://www.ltyflyme.com",

  "action" => "submit"

         );

         $ch = curl_init();

         curl_setopt($ch, CURLOPT_URL, $url);

         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

         curl_setopt($ch, CURLOPT_POST, 1);      //设置请求类型为post

         curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);   //添加post数据到请求

         $response = curl_exec($ch);   //执行请求

         curl_close($ch);

         echo $response;

         上面请求发送到post.php中后,通过print_r($_POST)打印出结果如下:

         Array(

  [name]
=> lty

[url] =>
http://www.ltyflyme.com
[action]
=> submit

          )

    4. 文件上传

       通过curl发送post请求来实现文件上传。实现的代码如下:

       $url = "http://www.ltyflyme.com/upload.php";

       $post_data = array ("attachment" => "@D:/blog/img1.jap");

       $ch = curl_init();

       curl_setopt($ch, CURLOPT_URL, $url);

       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

       curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

       $response = curl_exec($ch);

        curl_close($ch);

        print_r($response);

        通过以上代码,将本地的img1.jpg上传到本地服务器upload.php中,如果在upload.php中输出上传的信息,则结果为:

        Array([attachment] => Array(

  [name]
=> img1.jpg

[type] => application/octet-stream

[tmp_name] => E:\xampp\tmp\phpF27D.tmp

[error] => 0

[size] => 11490

  ));

       5. curl批处理(multi curl)

        创建两个curl资源

            $ch1 = curl_init();

            $ch2 = curl_init();

        指定URL和适当的参数

            curl_setopt($ch1, CURLOPT_URL, "http://lyy.php.net");

            curl_setopt($ch1, CURLOPT_HEADER, 0);

 
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net");

            curl_setopt($ch2, CURLOPT_HEADER, 0);

         创建curl批处理句柄

             $mh = curl_multi_init();

          添加前面两个句柄

              curl_multi_add_handle($mh, $ch1);

              curl_multi_add_handle($mh, $ch2);

           预定义一个状态变量

               $active = null;

            执行批处理

                do {

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

                 } while ($mrc == CURLM_CALL_MULTI_PERFORM);

                 while ($active && $mrc == CURLM_OK) {

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

   do
{

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

}
while ( $mrc == CURLM_CALL_MULTI_PERFORM);

 }

                   }

               关闭各个句柄

                curl_multi_remove_handle($mh, $ch1);

                curl_multi_remove_handle($mh, $ch1);

                curl_multi_close($mh);

            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息