保山小肉串制作培训多少钱:用芭蕾讲好中国故事

衣装理容编辑:监管部
Lina
衣装理容编辑
2019-09-21 12:42来源于:中国鞋机鞋材网
分享:

保山小肉串制作培训多少钱,昆明小笼包那家培训好,怒江哪里培训千层饼,昭通包子馒头培训,临沧哪里学烤鱼,昆明特色小吃技术培训

  Fiddler 和 Charles 常见 HTTP 调试器,它们会在本地运行个代理服务器,可以查看浏览器或其它客户端软件通过这个代理发起请求和服务器响应,也可以在请求提交到服务器之前和服务器返回响应之后设置断点,手工修改请求、响应内容。另外,两个软件都可以以“中间人攻击”形式,解密 HTTPS 通信。

  某天,我在调试某个网站过程中,希望把“修改 ajax 请求响应”这功能持久化下来方便使用。Fiddler 提供自定义脚本功能,但它 macOS 版本和我用 Homebrew 安装 Mono 不兼容,而且我也不希望我所有网络流量都经过 Fiddler 代理。另外考虑到将来可能把这个功能小范围发布出来供其它人使用,那么 Fiddler 或者 Charles 这种“重量级”解决方案就被否定,所以我很自然地想到使用 Chrome 扩展来完成此任务。

  实现个 Chrome 扩展,自动修改特定网站 ajax 请求响应。网站个重度使用 ajax 网站,并且带有比较严格“反作弊”限制,对 Cookie、HTTP Header(Referer等)甚至多个 ajax 请求顺序都有要求,如果出错就无法继续。

  从 Fiddler 这种方案自然而然地想到,如果 Chrome 也提供类似“断点”机制,外加 JavaScript 脚本,上述问题就解决。于搜下 “chrome extension hook ajax”,找到 第个回答便使用 。

  于开始学习 WebRequest API 文档,它能监听事件如上往示,最有可能满足条件就 onResponseStarted ,但仔细看发现它个异步事件,并不能实现“断点”,也不能做任何改动(This event is informational and handled asynchronously. It does not allow modifying or cancelling the request)

  换个关键词 “webrequest api modify response” 再次搜索,找到和我需求十分吻合问题和答案: ,其中有三个有用信息:

  Chrome  issue: 意味着上述想法并不能实现

  可以替换页面上 XMLHttpRequest

  用 WebRequest API 将请求重定向到 data:-URL

  初看上去,第三个方案似乎比较简单,所以先按此执行。

  我想方案:在中以 blocking 模式注册监听 onBeforeRequest 事件,在事件处理函数中,重新发起这个 ajax 请求∷处要注意两点:.要在原页面环境中请求,大致思路在页面中,背景页使用机制和页面脚本通信,.“重新发起” ajax 请求依然会被 onBeforeRequest 事件拦截,需要做额外处理。“重新发起” ajax 请求拿到数据后,进行修改,最后编码为 data:-URL 作为 返回。

  背景页代码大致如下:

  页面脚本代码大致如下:

  前途殊明,道路曲折。在这里我就遇到“暂时困难”,写完上面代码,我竟然不知道怎么写下去。前面说方案,到这里似乎已经完成 % :背景页拦截 ajax 请求,在页面注入脚本重新发起请求,拿到结果,进行修改,编码成 data:-URL~差就差在最后步上,这个 data:-URL 在回调函数里拼出来,而执行回掉函数时候,外层事件处理函数早就应该返回啦、没有任何机制可以在返回前“等下” sendMessage。

  继续上搜索引擎,我看到 这又个 issue ,而且结论还 WontFix 。

  其中,用 storage API 可以解决,但下条回复反驳他,因为 storage API 本身也异步。于这个想法又次失败。

  我把背景页改下,页面脚本敝不变:

  方法简单粗暴,ajax 请求照尝起(因为服务端限制,如果不发起这个 ajax 请求话,下步其它 ajax 必然会返回错误,功能就无法使用),但结果直接忽略,用预先准备好假页面直接返回。

  这个方案实际执行时“时好时坏”,原因,事件处理函数返回后,页面下个 ajax 请求就会发起,如果模拟 ajax 请求先于它发生,则结果正常〈之,如果下个 ajax 请求发起时,我模拟请求尚未发送,那服务端就直接拒绝执行,返回“服务器繁忙”错误,其实这“服务器繁忙”就“发现你在作弊”意思。

  最后,只剩下这个方案,说得很复杂,但搜下还能找到“成品”方案。 中已经写好代码,略做修改如下:

  这段代码会替换 XMLHttpRequest 中 open 和 send 函数,在 open 中优先注册 readystatechange 事件监听,以便在原页面代码执行前修改 responseText 内容。

  这段代码不能直接注入页面,因为 Chrome 扩展 Content Script 会运行在中,直接注入话,并不能影响到页面原有 XMLHttpRequest。想要实现我们想要功能,可以参考 做法。再写个文件:

  这个功能看就知道,在页面上增加个