说明:
fiddler在手机抓包方面用的比较多,有时候网页请求的信息会加密处理,这时候通过构造请求头去请求url时就没有那么容易了。而用seleniume模拟得时候有些在js中的文件不会请求到。这时候就需要用seleniume和fiddler的高级用法一起使用。fiddler可以将request和response的请求信息以及请求到的内容发通过修改文件Fiddler ScriptEditor.js的相关接口代码保存到本地。Fiddler的Customize Rules功能,支持用户添加脚本(Java Script)来实现自定义功能。
第一步:启动fiddler,并打开Fiddler ScriptEditor
点击顶部工作栏中的“Rules–》Customize Rules…”,或使用快捷键Ctrl+R.
通过改动OnBeforeRequest函数可以将请求内容保存到指定文件
1:保存请求的url到本地的request.log文件中
if (oSession.HostnameIs("域名") && oSession.uriContains("期望字符")){
var filename = "D:/workspace/.../request.log";
var curDate = new Date();
var logContent = "[" + curDate.toLocaleString() + "] " + oSession.PathAndQuery + "\r\n";
var sw : System.IO.StreamWriter;
if (System.IO.File.Exists(filename)){
sw = System.IO.File.AppendText(filename);
sw.Write(logContent);
}
else{
sw = System.IO.File.CreateText(filename);
sw.Write(logContent);
}
sw.Close();
sw.Dispose();
}
2:保存完整的请求到本地request文件夹中
if(oSession.HostnameIs("域名")){
var url = oSession.url.ToString();
url= url.Substring(26);//标识截取的起始位置
url=url.Replace("\\","_");
url=url.Replace("/","_");
if(url.Contains("?")){
var postion = url.IndexOf("?");;
url = url.Substring(0,postion-1);
}
oSession.SaveSession("D:/workspace/.../request/"+url+".txt",false);
我为了能保存测试过程中所有的请求,在文件名称中添加时间戳:
var now = new Date();
var ts = now.getTime();
// var ts = now.getFullYear()+now.getMonth()+now.getDate()+now.getDay()+now.getHours()+now.getMinutes()+now.getSeconds()+now.getMilliseconds();
...
oSession.SaveSession("D:/workspace/.../request/"+url+ts+".txt",false);
3:将请求url和请求内容保存到指定文件
if(oSession.HostnameIs("trends.google.com") && oSession.uriContains("api/widgetdata"))
{
oSession.utilDecodeResponse();//消除保存的请求可能存在乱码的情况
var url = oSession.url.ToString();
var fso;
var file;
var str1;
fso = new ActiveXObject("Scripting.FileSystemObject");
//文件保存路径,可自定义
file = fso.OpenTextFile("d:\\Response.txt",8 ,true, true);
str1 = oSession.GetResponseBodyAsString()
file.writeLine(url);
file.writeLine("\n");
file.writeLine(str1);
file.writeLine("###");
file.close();
}
更高级的用法
(此处内容为引用)
1. 导入 FiddlerCore.dll 第三方库。
2. 开启侦听端口,FiddlerApplication.Startup(8888, FiddlerCoreStartupFlags.Default);
3. 设置响应可写,
FiddlerApplication.BeforeRequest += t>
{
if (t.uriContains("cnblogs"))
{
t.bBufferResponse = true;
}
};
4. 修改响应,
FiddlerApplication.BeforeResponse += t =>
{
if (t.fullUrl.Contains("cnblogs"))
{
var document = new HtmlDocument();
using (var stream = new MemoryStream(Encoding.GetEncoding(936).GetBytes(t.GetResponseBodyAsString())))
{
document.Load(stream);
}
var a = t.GetResponseBodyAsString();
document.LoadHtml(a.Replace("博客园", "博客论坛"));
using (var stream = new MemoryStream())
{
document.Save(stream, Encoding.UTF8);
t.ResponseBody = stream.ToArray();
}
}
};