***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进行配置
***PHP请求服务curl以及json的解析的更多相关文章
- android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据
补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访 ...
- jsonObject jsonArray jsonTokener jsonStringer,json解析以及http请求获取josn数据并加以解析
JSON的定义: 一 种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的 支持),从而可以在不同平台间进行 ...
- Android从服务端获取json解析显示在客户端上面
Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...
- curl 发送json请求
curl 发送json请求 这个是在cmd环境下的输入:注意{\"userName\":\"helo\",\"id\":1}中间不能有空格 ...
- Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...
- 解决ajax请求返回Json无法解析"\"字符的问题
原因:获取身份证信息,涉及图片路径,存在“\”字符,导致Json解析错误 解决思路:将返回类型从"json"改成"text",此时返回的数据类型变成字符串,将字 ...
- JSON数据解析(转)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android ...
- JSON数据解析(GSON方式) (转)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...
- 10分钟掌握XML、JSON及其解析
引言 NOKIA 有句著名的广告语:“科技以人为本”.任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个人穷其一生也未必能掌 ...
随机推荐
- Singleton(单例模式)
类的实例化次数只能一次. 例如:小王和小李通过门铃进行沟通,首先判断小王家是否有门,若没有建立门,若有门直接返回门. var xiaowang = (function(argument){ var m ...
- NC参照查那个表
select * from bd_refinfo where name like '%人员工作记录全职树(行政树)%';select * from bd_refinfo where name like ...
- SQL*PLUS中批量执行SQL语句
SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...
- ASPxGridView动态创建表格列编辑模板
在项目中用到了DevExpress的ASPxGridview控件,每每去配置它的时候,总感觉很是啰嗦,于是想到了用代码自动配置. 于是有了这样的代码: foreach (ZiyuWeb.Entity. ...
- 对象创建型模式------Builder(生成器或建造者模式)(2)
链接转自:http://blog.csdn.net/wuzhekai1985/article/details/6667467 主要思想是:首先有个指挥家思想者将大体的设计思路设计出来,然后寻找一部分工 ...
- 编程中的 if ()else() 语句
例句 if() else() double d = Convert.ToDouble(Console .ReadLine()); if (d >= 60 && d< ...
- 从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI -- 结构规划
环境说明 注,本套环境所用机器全部是64位的. 管理服务器载体:安装win7操作系统,通过VMware Workstation安装4台虚拟机,用作vCenter,Connection Server,D ...
- 再议Unity 3D
一年前,偶发冲动,翻译了<[译] Unity3D游戏和facebook绑定(1:简介)>系列文章. 现在看有2个明显的好处, 一:给这个不温不火的博客带了top 3的人气: 二:我个人由此 ...
- UITableViewCell左滑的时候添加多个按钮的方法(iOS8+)以及UIRefreshControl(iOS6+)的使用。
之前想在cell左滑的时候添加更多的按钮而不是只有‘删除’按钮如下所示,貌似不是一件简单的事.但是现在只要实现几个方法就行了. 代码写的比较垃圾,重在理解这个知识.. . 具体代码: // // T ...
- OpenJudge/Poj 1004 Financial Management
1.链接地址: http://poj.org/problem?id=1004 http://bailian.openjudge.cn/practice/1004 2.题目: 总时间限制: 1000ms ...