• ***PHP请求服务curl以及json的解析


       对于thinkphp框架,相信每一个php开发者都会有了解或者熟悉吧!前端很多都用的ajax的结合,前几天遇到了一个问题,就是请求另一个服务,也就是请求一个接口,然后对方返回一个json串,一开始对curl不熟悉,导致自己的程序不能很顺利的去处理请求服务后的json串!今天对curl又看了一下,问题解决了,现在就请求的的代码做如下显示:
    $new_url="www.xxx.com";
    $requesturl="http://192.168.1.100:1234/test/test?url=".urlencode($new_url);
    $ch = curl_init();
    // 设置URL和相应的选项
    curl_setopt($ch, CURLOPT_URL, $requesturl);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $info=curl_exec($ch);
    // 关闭cURL资源,并且释放系统资源
    curl_close($ch);
    //$info为请求服务后的内容,$info会因设置的参数的不同,接受不同的内容,总之,要清楚自己想要的结果,然后再进行选项配置。$info里面并不一定是json串,要看服务的功能。若您请求的服务后,对方会给你返回json串的话,而你有需要将json串进行分解,那么请做一下的操作,就可以得到每个key和value:
    假设我们$info = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    //对返回的json串进行decode,分解后与下面的数组一起合成json串
    $info = json_decode($info,true);
    $a  = $info['a'];
    $b = $info['b'];
    .....
    这样就可以得到每个key和value了。至于一下你要做什么,那就是自己的事情了!



    第二次更新时间:2012年11月30日11:50:15

    因为之前对php没有过多的接触,有另一个方式显示服务的请求:
    $new_url="www.xxx.com";
    $requesturl="http://192.168.1.100:1234/test/test?url=".urlencode($new_url);
            $json_ret = file_get_contents($requesturl);
            $json_ret = mb_convert_encoding($json_ret, "UTF-8", "gb2312");//转码,(这里只是个例子)
            $result = json_decode($json_ret, true);//将json串进行译码,前提是返回来的是被json_encode处理后返回的。

    在用file_get_contents函数采集网站时,有时会遇到明明用浏览器可以看,但就是采不到内容的问题。下面说一下问题的原因,以及解决方法。下面先说一下User-Agent。User-Agent是Http协议中的一部分,属于头域的组成部分,通俗的讲,User-Agent是一种向访问网站提供你所使用的浏览器类型、操作系统、浏览器内核等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计。比如对同一个网站(页面)用PC和移动终端访问展现的页面布局等一些信息是不一样的。下面说一些我们见到的问题:在用file_get_contents函数采集网站时,有时会遇到明明用浏览器可以看,但就是采不到内容的问题。这大概因为是服务器上做了设置,根据 User_agent判断是否为正常的浏览器请求,默认PHP的file_get_contents函数是不发送UA的,如果要采集这样的网站,我们就要让PHP模拟浏览器发送UA,这样对方的服务器就会以为我们是用浏览器是浏览,而返回正常的内容。
    发送UA方法很简单,在使用file_get_contents函数前加上这一句:
    ini_set('user_agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3');对于Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3,可根据需要自行修改成其他的。加上这样的头设置,就不会出现那样的问题。这也就是平时说的伪装。

    json_encode()/json_decode()学习链接:
         http://blog.csdn.net/nailwl/article/details/5687363
         http://cn2.php.net/json_decode
    php中curl选项设置:
         http://www.cnblogs.com/c3055/archive/2011/08/18/2143832.html
         http://www.wapm.cn/phpdoc/zh/ref.curl.html
    ini_set():
         http://hi.baidu.com/bing2liuliu/item/ee3abcbe6a302547ba0e12a0

    wampserver中有的没有选择curl扩展,请点击:
    http://blog.sina.com.cn/s/blog_6ce9e8870101bq0r.html进行配置

  • 相关阅读:
    Gmail、还有人需要吗?
    Google 打不开
    不能忽视的Doctype
    ASP.NET2.0中用ICallbackEventHandler实现客户端与服务器端异步交互
    DataGrid常用小技巧
    ASP.NET程序安全性(三) 表单提交、过滤用户输入
    Objection!!!
    编写3dmax插件需要注意的几个问题
    又一个IGame的bug
    VC2010中的C++0x特性 Part 1:Lambdas,auto, static_assert
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4668113.html
Copyright © 2020-2023  润新知