您现在的位置是:知识 >>正文
浏览器模拟post
知识66761人已围观
简介打开浏览器,按F12,切到Network面板,刷新页面。你会看到一条条请求像流水一样滚过去。如果其中有POST请求,点开它,看Headers,看Payload,看Response。这就是浏览器在替你“ ...
打开浏览器,浏览按F12,器模切到Network面板,浏览刷新页面。器模你会看到一条条请求像流水一样滚过去。浏览如果其中有POST请求,器模点开它,浏览看Headers,器模看Payload,浏览看Response。器模这就是浏览浏览器在替你“模拟”一次POST——准确说,是器模浏览器在正常发起POST,你只是浏览在旁边偷看。
但很多人说的器模“浏览器模拟POST”不是这个意思。他们想要的浏览是:不写后端代码,不装Postman,只靠浏览器就把一个POST请求发出去。这活儿能干,而且干法不止一种。
最土的办法:表单
写一个HTML文件,里面放个form,method设成post,action指向目标地址,input的name对应参数名。打开这个文件,点提交。浏览器就会替你发一个POST出去。缺点是页面会跳转,你只能看到结果页,看不到请求细节。而且有些接口需要JSON body,表单默认发的是application/x-www-form-urlencoded,对不上。
我试过用表单去调一个只收JSON的接口,后端直接返回400。后来改成enctype="text/plain",勉强能发出去,但格式还是不对。表单这条路,适合老式接口,现代API基本走不通。
控制台里用fetch
F12打开Console,直接敲:
fetch('https://example.com/api', { method: 'POST', headers: { 'Content-Type': 'application/json'}, body: JSON.stringify({ name: 'test', value: 123}) }).then(r => r.json()).then(console.log) 回车。请求就发出去了。这是我最常用的方式。不用装任何东西,浏览器本身就是运行环境。改参数也方便,上下箭头调出历史命令,改个值再跑一遍。
有个坑:跨域。如果目标接口没开CORS,fetch会被浏览器拦下来,Console里报一片红。这时候你看到的不是接口返回的错误,而是浏览器自己拦的。解决办法?要么让后端加Access-Control-Allow-Origin,要么换个方式。
绕过跨域:直接导航到目标域
先打开目标网站的任意页面,然后在那个页面的Console里执行fetch。这时候是同源请求,CORS不拦。比如你要调api.weibo.com的接口,就先打开weibo.com,再在Console里发请求。前提是你得登录,否则没Cookie,接口照样拒绝你。
这个办法我用了很多次。有一次调一个内部系统的接口,直接fetch被CORS挡了,我就先打开那个系统的首页,登录进去,再在Console里发POST,一次过。
XMLHttpRequest:老但稳
fetch之前是XHR。现在很少人手动写XHR了,但在某些场景下它比fetch好用。比如你要看上传进度,fetch原生不支持,XHR可以。再比如你需要同步请求——虽然不推荐——XHR也能干。
var xhr = new XMLHttpRequest(); xhr.open('POST', '/api', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) console.log(xhr.responseText); }; xhr.send(JSON.stringify({ a: 1})); 代码比fetch长,但可控性更强。我一般只在需要进度条或者兼容老浏览器时才用它。
浏览器扩展:一键发送
Chrome商店里有不少REST client扩展,比如Talend API Tester、Advanced REST Client。装一个,填URL、选POST、写body、点Send。本质上它们也是在浏览器里发请求,只是包装了一层UI。适合不熟悉Console的人,或者需要保存请求历史、管理多组参数的场景。
我自己装过几个,后来都卸了。原因很简单:打开扩展要点击好几次,不如直接开Console敲一行fetch来得快。但如果你要反复调同一个接口,扩展的“保存请求”功能确实省事。
什么时候不该用浏览器模拟
需要发大量请求、需要并发、需要定时任务、需要处理二进制流——这些场景浏览器不适合。浏览器是给人看的,不是给机器跑的。真要压测或者批量调接口,还是得上脚本或者专业工具。
浏览器模拟POST,核心就一句话:利用浏览器已有的运行环境,手动构造并发送一个HTTP请求。表单、fetch、XHR、扩展,选哪个取决于你的具体需求和手头环境。没有银弹,够用就行。
Tags:
相关文章
渗透测试作为网络安全评估的一部分
知识某家电商平台在季度安全审计中,渗透测试团队用三天时间,从一个被人遗忘的API接口打进了核心数据库。那个接口是两年前外包团队留下的,连文档都没有。攻击路径其实不复杂——未鉴权的接口泄露了内部token, ...
【知识】
阅读更多历史预警信息查询
知识凌晨三点十七分,手机震了。不是闹钟,是那条短信——「橙色预警:今夜至明晨,本市西部山区可能发生山洪,请勿前往。」我翻了个身,看到窗外的路灯正把雨丝照成银线,心想这预警发得真够晚的。可第二天刷新闻,还 ...
【知识】
阅读更多焊缝渗透检测报告格式怎么写
知识焊缝渗透检测报告,说白了就是干完活给业主交的一份“体检单”。格式不对,检测做得再漂亮也白搭——人家看不懂,或者看完了不敢签字,返工的是你自己。我见过太多刚入行的伙计,探伤技术没问题,一写报告就抓瞎,漏 ...
【知识】
阅读更多