一、Fiddle抓包进阶
fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书。
一、网页不安全
1.用fiddler抓包时候,打开百度网页: https://www.baidu.com
2.提示:网页不安全
二、fiddler设置(抓取所有https请求)
1.打开菜单栏:Tools>Fiddler Options>HTTPS
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
好了,文章到此结束,希望可以帮助到大家。