zoukankan      html  css  js  c++  java
  • curl、fsockopen、file_get_contents

    curl  get方式

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 6);
    $result = curl_exec($ch);
    curl_close($ch);

    curl  post方式

    $url = http://www.sina.com;
    
    $params = array('id'=>11,'aa'=>22,'cc'=>33);
    
    $data = http_build_query($params);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if('' != $data){
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    
    curl_setopt($ch, CURLOPT_TIMEOUT, 6);
    $result = curl_exec($ch);
    var_dump(curl_error($ch));
    
    echo curl_getinfo($ch,CURLINFO_TOTAL_TIME); //查看总的实行时间
    
    curl_close($ch);
    return $result;

    curl与fsockopen的不同

      php模拟提交常见的两个函数fsockopen和curl,它们两个都能实现php的模拟提交但不同之处与效率又如何呢。
    首先说下不同

      fsockopen是比较底层的调用,属于网络系统的socket调用,而curl经过的包装支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证,HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

      fsockopen返回的是没有处理过的数据,包括数据的长度数据内容和数据的结束符。而curl是处理后的内容。

      在用户使用时,curl更加方便,但其参数很多,配置的时候又是风复杂,fsockopen则有固定的几个参数,简单,但获取结果可能需要再做处理。

      从效率上说两者基本差不了多少。

    赵永斌: 有些时候用file_get_contents()调用外部文件,容易超时报错。换成curl后就可以.具体原因不清楚 curl 效率比file_get_contents()和fsockopen()高一些,原因是CURL会自动对DNS信息进行缓存(亮点啊 有我待亲测)

    范佳鹏: file_get_contents curl fsockopen 在当前所请求环境下选择性操作,没有一概而论: 具我们公司开发KBI应用来看: 刚开始采用:file_get_contents 后来采用:fsockopen 最后到至今采用:curl

    (远程)我个人理解到的表述如下(不对请指出,不到位请补充) file_get_contents 需要php.ini里开启allow_url_fopen,请求http时,使用的是http_fopen_wrapper,不会keeplive.curl是可以的。 file_get_contents()单个执行效率高,返回没有头的信息。 这个是读取一般文件的时候并没有什么问题,但是在读取远程问题的时候就会出现问题。 如果是要打一个持续连接,多次请求多个页面。那么file_get_contents和fopen就会出问题。 取得的内容也可能会不对。所以做一些类似采集工作的时候,肯定就有问题了。 sock较底层,配置麻烦,不易操作。 返回完整信息。 潘少宁-腾讯: file_get_contents 虽然可以获得某URL的内容,但不能post get啊。 curl 则可以post和get啊。还可以获得head信息 而socket则更底层。可以设置基于UDP或是TCP协议去交互 file_get_contents 和 curl 能干的,socket都能干。 socket能干的,curl 就不一定能干了 file_get_contents 更多的时候 只是去拉取数据。效率比较高 也比较简单。 赵的情况这个我也遇到过,我通过CURL设置host 就OK了。 这和网络环境有关系

  • 相关阅读:
    第五次站立会议
    第四次站立会议
    第三次晚间站立总结会议
    易校小程序典型用户需求分析
    第三次站立会议
    第二次晚间站立总结会议
    第二次站立会议
    第一次晚间站立总结会议
    MyBatis注解
    延迟加载与缓存
  • 原文地址:https://www.cnblogs.com/phpor/p/2557146.html
Copyright © 2011-2022 走看看