×

json_decode详解

前端技术网 前端技术网 发表于2024-01-27 23:03:06 浏览540 评论0

抢沙发发表评论

一、Fiddle抓包进阶

fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书。

一、网页不安全

json_decode详解

1.用fiddler抓包时候,打开百度网页: https://www.baidu.com

2.提示:网页不安全

二、fiddler设置(抓取所有https请求)

1.打开菜单栏:Tools>Fiddler Options>HTTPS

json_decode详解

2.勾选Decrypt HTTPS traffic,里面的两个子菜单也一起勾选了

Fiddler抓包2-只抓APP的请求

fiddler抓手机app的请求,估计大部分都会,但是如何只抓来自app的请求呢?

把来自pc的请求过滤掉,因为请求太多,这样会找不到重要的信息了。

1.电脑上已装fiddler

2.手机和电脑在同一局域网

一、设置

1.fiddler>Tools>Fiddler Options>Connections勾选Allow remote computers to connect。

2.记住这里的端口号:8888,后面会用到。

一、get请求 [图片上传中...(get请求.png-2ac7c-1529389857624-0)]

1.打开fiddler工具,然后浏览器输入博客首页地址: http://www.cnblogs.com/yoyoketang/

2.点开右侧Inspectors下的Headers区域,查看Request Headers

3.Request Headers区域里面的就是请求头信息,可以看到打开博客园首页的是get请求

四、get和post请求参数区别

1.关于get和post的功能上区别就不说了,大家自己查资料,这里主要从fiddler抓包的层面查看请求参数上的区别

2.get请求的Raw参数查看,主要分三部分:

--第1部分是请求url地址

--第2部分是host地址

--第3部分是请求头部信息header

Fiddler抓包4-工具介绍(request和response)

本篇简单的介绍下fiddler界面的几块区域,以及各自区域到底是干什么用的,以便于更好的掌握这个工具

一、工具简介

1.第一块区域是设置菜单,这个前面2篇都有介绍

2.第二块区域是一些快捷菜单,可以点下快捷功能键

3.第三块左边是抓捕的请求会话列表,每一个请求就是一个会话

4.第四块右边上方区域是request请求的详细信息,可以查看headerd、cookies、raw、json等

5.第五块右边下方区域就是response信息,可以查看服务端返回的json数据或其它信息

6.第六块区域左下角黑色的那块小地方,虽然很不起眼,容易被忽略掉,这地方是命令行模式,可以输入简单的指令如:cls,执行清屏的作用等

三、Request和Response

1.Request是客户端发出去的数据,Response是服务端返回过来的数据,这两块区域功能差不多

No Authorization Header is present.

5.cookies:查看cookie详情

6.raw:查看一个完整请求的内容,可以直接**

7.json:查看json数据

8.xml:查看xml文件的信息

四、decode解码

1.如果response的TextView区域出现乱码情况,可以直接点下方黄**域解码

一、Composer简介

点开右侧Composer区域,可以看到如下界面,就是测试接口的界面了

二、模拟get请求

1.在Composer区域地址栏输入博客首页: http://www.cnblogs.com/yoyoketang/

2.选择get请求,点Execute执行,请求就可以发送成功啦

3.请求发送成功后,左边会话框会生成一个会话记录,可以查看抓包详情

4.右侧history区域会多一个历史请求记录

一、url详解

1.url就是我们平常打开百度在地址栏输入的: https:www.baidu.com,如下图,这个是最简单的url地址,打开的是百度的主页

二、url解析

1.以" https://www.baidu.com/s?wd=上海悠悠博客园"这个url请求的抓包为例

三、请求参数(params)

1.在url里面请求参数一般叫params,但是我们在fiddler抓包工具看到的参数是:QueryString

2.QueryString是像服务端提交的参数,其实跟params是一个意思,每个参数对应的都有name和value值

3.多个参数情况如下

一、body数据类型

常见的post提交数据类型有四种:

1.第一种:application/json:这是最常见的json格式,也是非常友好的深受小伙伴喜欢的一种,如下

{"input1":"xxx","input2":"ooo","remember":false}

2.第二种:application/x-www-form-urlencoded:浏览器的原生 form表单,如果不设置 enctype属性,那么最终就会以 application/x-www-form-urlencoded方式提交数

input1=xxx&input2=ooo&remember=false

3.第三种:multipart/form-data:这一种是表单格式的,数据类型如下

------WebKitFormBoundaryrGKCBY7qhFd3TrwA

Content-Disposition: form-data; name="text"

title

------WebKitFormBoundaryrGKCBY7qhFd3TrwA

Content-Disposition: form-data; name="file"; filename="chrome.png"

Content-Type: image/png

PNG... content of chrome.png...

------WebKitFormBoundaryrGKCBY7qhFd3TrwA-

4.第四种:text/xml:这种直接传的xml格式

<methodcall>

<methodname>examples.getStateName</methodname>

<params>

<param>

<value><i4>41</i4></value>

</params>

</methodcall>

二、json格式

1.打开博客园的登录页面,输入账号密码后抓包,查看post提交数据,点开Raw查看整个请求的原始数据

三、x-www-form-urlencoded

1.登录博客园后,打开新随笔,随便写一个标题和一个正文后保存,抓包数据如下

四、WebFrom

1.为什么登录请求的WebFrom的body部分为空呢?

五、xml

1.如果遇到text/xml这种格式的body,那就如下图这样的了

一、断点

1.为什么要打断点呢?

比如一个购买的金额输入框,输入框前端做了限制100-1000,那么我们测试的时候,需要测试小于100的情况下。很显然前端只能输入大于100的。这是我们可以先抓到接口,修改请求参数,绕过前端,传一个小于100的数,检查服务端的功能是否OK。

也就是说接口测试其实是不需要管前端的,主要测后端的功能。Fiddler作为代理服务器的作用其实就相当于上面故事里面的小王,传纸条的作用,Fiddler(小王)修改了请求参数(小纸条),是为了验证服务端功能(女神C)。

2.Fiddler可以修改以下请求

--Fiddler设置断点,可以修改HTTP请求头信息,如修改Cookie,User-Agent等

--可以修改请求数据,突破表单限制,提交任意数字,如充值最大100,可以修改成10000

--拦截响应数据,修改响应体,如修改服务端返回的页面数据

二、断点的两种方式

1.before response:这个是打在request请求的时候,未到达服务器之前

--*丝A传给小王的时候,小王在这个时候拦截了小纸条,未传给女神C

3.打完断点后,会发现所有的请求都无法发出去了,这时候,点下Go按钮,就能走下一步了

4.找到需要修改的请求后,选中该条会话,右侧打开WebFroms,这时候里面的参数都是可以修改的了

四、单个断点

已经知道了某个接口的请求地址,这时候只需要针对这一条请求打断点调试,在命令行中输入指令就可以了

请求前断点(before response): bpu

4.取消断点,在命令行输入: bpu回车就可以了

响应后断点(after requests): bpafter

3.登录博客园,会发现已经拦截到登录后服务器返回的数据了,此时可以修改任意返回数据

4.取消断点,在命令行输入: bpafter回车就可以了

五、拦截来自某个网站所有请求

1.在命令行输入:bpu www.cnblogs.com

2.打开博客园任意网页,发现都被拦截到了

3.打开博客园其他网站,其它网站可以正常请求

4.说明只拦截了来自部落论坛( www.cnblogs.com)的请求

5.清除输入bpu回车即可

六、命令行其它相关指令

Bpafter, Bps, bpv, bpm, bpu

这几个命令主要用于批量设置断点

Bpafter xxx:中断 URL包含指定字符的全部 session响应

Bps xxx:中断 HTTP响应状态为指定字符的全部 session响应

Bpv xxx:中断指定请求方式的全部 session响应

Bpm xxx:中断指定请求方式的全部 session响应、、同于 bpv xxx

Bpu xxx:与bpafter类似

当这些命令没有加参数时,会清空所有设置了断点的HTTP请求。

更多的其他命令可以参考Fiddler官网手册

一、保存为文本

1.以博客园登录为例,抓到登录的请求会话

2.点左上角File>Save>Selected Sessions>as Text,保存到电脑上就是文本格式的

三、乱码问题(decode)

1.打开博客园首页: http://www.cnblogs.com/yoyoketang/,保存之后查看,会发现返回的是乱码

二、python 字符串转 json

json本身就是字符串,是符合json格式的字符串。

所以,你说的,字符串转json,就是不正确的描述。

一般正常的用法是:

涉及到,在json字符串,来自字符变量或文件内容,和不同类型的变量,之间的转换。

变量转json:

json.dumps或json.dump

json转变量:

json.loads或json.load

详解:

【整理】Python中将(字典,列表等)变量格式化成(漂亮的,树形的,带缩进的,JSON方式的)字符串输出

【整理】什么是JSON+如何处理JSON字符串

(此处不给贴地址,请自己用google搜标题,即可找到帖子地址)

三、&符号转json

一、json_encode()

该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:

$arr= array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

echo json_encode($arr);

结果为

{"a":1,"b":2,"c":3,"d":4,"e":5}

再看一个对象转换的例子:

$obj->body='another post';

$obj->id= 21;

$obj->approved= true;

$obj->favorite_count= 1;

$obj->status= NULL;

echo json_encode($obj);

结果为

{"body":"another post",

"id":21,

"approved":true,

"favorite_count":1,

"status":null}

由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。

二、索引数组和关联数组

PHP支持两种数组,一种是只保存"值"(value)的索引数组(indexed array),另一种是保存"名值对"(name/value)的关联数组(associative array)。

电脑技术002pc网认为此文章对《php&转换成&php json_encode与json_decode详解及实例》说的很在理。

由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。

比如,现在有一个索引数组

$arr= Array('one','two','three');

echo json_encode($arr);

结果为:

["one","two","three"]

如果将它改为关联数组:

$arr= Array('1'=>'one','2'=>'two','3'=>'three');

echo json_encode($arr);

结果就变了:

{"1":"one","2":"two","3":"three"}

注意,数据格式从"[]"(数组)变成了"{}"(对象)。

如果你需要将"索引数组"强制转化成"对象",可以这样写

json_encode((object)$arr);

或者

json_encode($arr, JSON_FORCE_OBJECT);

三、类(class)的转换

下面是一个PHP的类:

class Foo{

const ERROR_CODE='404';

public$public_ex='this is public';

private$private_ex='this is private!';

protected$protected_ex='this should be protected';

public function getErrorCode(){

return self::ERROR_CODE;

}

}

现在,对这个类的实例进行json转换:

$foo= new Foo;

$foo_json= json_encode($foo);

echo$foo_json;

输出结果是

{"public_ex":"this is public"}

可以看到,除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。

四、json_decode()

该函数用于将json文本转换为相应的PHP数据结构。下面是一个例子:

$json='{"foo": 12345}';

$obj= json_decode($json);

print$obj->{'foo'};// 12345

通常情况下,json_decode()总是返回一个PHP对象,而不是数组。比如:

$json='{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));

结果就是生成一个PHP对象:

object(stdClass)#1(5){

["a"]=> int(1)["b"]=> int(2)["c"]=> int(3)["d"]=> int(4)["e"]=> int(5)

}

如果想要强制生成PHP关联数组,json_decode()需要加一个参数true:

$json='{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json,true));

结果就生成了一个关联数组:

array(5){

["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5)

}

五、json_decode()的常见错误

下面三种json写法都是错的,你能看出错在哪里吗?

$bad_json="{'bar':'baz'}";

$bad_json='{ bar:"baz"}';

$bad_json='{"bar":"baz",}';

更多:php&转换成&php json_encode与json_decode详解及实例

https://www.002pc.comhttps://www.002pc.com/phpbiancheng/2916.html

你可能感兴趣的json,decode,encode,php,详解,实例

No alive nodes found in your cluster

好了,文章到此结束,希望可以帮助到大家。