网页注入js代码实现获取请求的url和请求体内容,并获取响应体内容

效果如图所示,可以拦截网页中所有的http请求并获取响应体内容,将里面的信息都打印到控制台显示出来,这个可以用于注入任何网页里面,例如使用浏览器插件注入这个代码,就可以获取网页的所有数据,还是很厉害的

具体的代码讲解逻辑

XMLHttpRequest.prototype.openXMLHttpRequest.prototype.sendXMLHttpRequest 对象的两个核心方法,用于发起 HTTP 请求。它们的作用如下:


1. XMLHttpRequest.prototype.open

作用

open 方法用于初始化一个 HTTP 请求。它指定请求的方法(如 GETPOST)、URL 以及是否异步执行请求。

语法

ini 复制代码
xhr.open(method, url[, async[, user[, password]]]);

参数

  1. method

    xml 复制代码
    <ul>
    	<li>请求的 HTTP 方法,例如&nbsp;<code>&quot;GET&quot;</code>、<code>&quot;POST&quot;</code>、<code>&quot;PUT&quot;</code>、<code>&quot;DELETE&quot;</code>&nbsp;等。</li>
    	<li>必须是大写字符串。</li>
    </ul>
    </li>
    <li>
    <p><strong><code>url</code></strong>:</p>
    
    <ul>
    	<li>请求的目标 URL。</li>
    	<li>可以是相对路径(如&nbsp;<code>&quot;/api/data&quot;</code>)或绝对路径(如&nbsp;<code>&quot;https://example.com/api/data&quot;</code>)。</li>
    </ul>
    </li>
    <li>
    <p><strong><code>async</code>(可选)</strong>:</p>
    
    <ul>
    	<li>是否异步执行请求。默认为&nbsp;<code>true</code>(异步)。</li>
    	<li>如果设置为&nbsp;<code>false</code>,请求会同步执行,浏览器会阻塞直到请求完成(不推荐使用,已弃用)。</li>
    </ul>
    </li>
    <li>
    <p><strong><code>user</code>(可选)</strong>:</p>
    
    <ul>
    	<li>用于认证的用户名。</li>
    </ul>
    </li>
    <li>
    <p><strong><code>password</code>(可选)</strong>:</p>
    
    <ul>
    	<li>用于认证的密码。</li>
    </ul>
    </li>

示例

arduino 复制代码
const xhr = new XMLHttpRequest();
xhr.open("GET", "https://example.com/api/data", true);

2. XMLHttpRequest.prototype.send

作用

send 方法用于发送 HTTP 请求。如果请求是 GETHEAD,通常不需要传递参数;如果是 POSTPUT,可以传递请求体数据。

语法

ini 复制代码
xhr.send([body]);

参数

  1. body(可选)

    xml 复制代码
    <ul>
    	<li>请求体数据。可以是以下类型:
    	<ul>
    		<li><code>FormData</code>:用于上传表单数据。</li>
    		<li><code>Blob</code>:用于上传二进制数据。</li>
    		<li><code>ArrayBuffer</code>:用于上传二进制数据。</li>
    		<li><code>string</code>:用于上传文本数据。</li>
    		<li><code>null</code>&nbsp;或省略:用于&nbsp;<code>GET</code>&nbsp;或&nbsp;<code>HEAD</code>&nbsp;请求。</li>
    	</ul>
    	</li>
    </ul>
    </li>

示例

  1. GET 请求

    xml 复制代码
    <pre>

    const xhr = new XMLHttpRequest(); xhr.open("GET", "example.com/api/data", true); xhr.send();

  2. POST 请求

    xml 复制代码
    <pre>

    const xhr = new XMLHttpRequest(); xhr.open("POST", "example.com/api/data", true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify({ name: "1024小神" }));


3. opensend 的工作流程

  1. 初始化请求

    xml 复制代码
    <ul>
    	<li>使用&nbsp;<code>open</code>&nbsp;方法初始化请求,设置请求方法、URL 和是否异步。</li>
    	<li>例如:
    	<pre>

    xhr.open("GET", "example.com/api/data", true);

  2. 设置请求头(可选)

    xml 复制代码
    <ul>
    	<li>如果需要,可以在&nbsp;<code>send</code>&nbsp;之前设置请求头。</li>
    	<li>例如:
    	<pre>

    xhr.setRequestHeader("Content-Type", "application/json");

  3. 发送请求

    xml 复制代码
    <ul>
    	<li>使用&nbsp;<code>send</code>&nbsp;方法发送请求。</li>
    	<li>如果是&nbsp;<code>POST</code>&nbsp;或&nbsp;<code>PUT</code>&nbsp;请求,可以传递请求体数据。</li>
    	<li>例如:
    	<pre>

    xhr.send(JSON.stringify({ name: "1024小神" }));

  4. 监听响应

    xml 复制代码
    <ul>
    	<li>通过事件监听器处理响应。</li>
    	<li>例如:
    	<pre>

    xhr.onload = function() { if (xhr.status === 200) { console.log("Response:", xhr.responseText); } };


4. 完整示例

以下是一个完整的 XMLHttpRequest 使用示例:

javascript 复制代码
const xhr = new XMLHttpRequest();

// 初始化请求
xhr.open("POST", "https://example.com/api/data", true);

// 设置请求头
xhr.setRequestHeader("Content-Type", "application/json");

// 监听响应
xhr.onload = function() {
  if (xhr.status === 200) {
    console.log("Response:", xhr.responseText);
  } else {
    console.error("Request failed with status:", xhr.status);
  }
};

// 发送请求
xhr.send(JSON.stringify({ name: "1024小神" }));

5. 注意事项

  1. 异步 vs 同步

    xml 复制代码
    <ul>
    	<li>异步请求(<code>async: true</code>)不会阻塞浏览器,推荐使用。</li>
    	<li>同步请求(<code>async: false</code>)会阻塞浏览器,已弃用。</li>
    </ul>
    </li>
    <li>
    <p><strong>请求头设置</strong>:</p>
    
    <ul>
    	<li>必须在&nbsp;<code>open</code>&nbsp;之后、<code>send</code>&nbsp;之前设置请求头。</li>
    </ul>
    </li>
    <li>
    <p><strong>跨域请求</strong>:</p>
    
    <ul>
    	<li>如果请求的目标 URL 是跨域的,需要服务器支持 CORS(跨域资源共享)。</li>
    </ul>
    </li>
    <li>
    <p><strong>错误处理</strong>:</p>
    
    <ul>
    	<li>可以通过&nbsp;<code>xhr.onerror</code>&nbsp;监听请求错误。</li>
    </ul>
    </li>

总结

  • open:初始化请求,设置方法、URL 和是否异步。
  • send:发送请求,可选传递请求体数据。
  • 两者结合使用,可以完成 HTTP 请求的发送和响应的处理。
相关推荐
samroom30 分钟前
Vue项目---懒加载的应用
前端·javascript·vue.js·性能优化
手机忘记时间1 小时前
在R语言中如何将列的名字改成别的
java·前端·python
郝郝先生--1 小时前
Flutter 异步原理-Zone
前端·flutter
geovindu2 小时前
vue3: pdf.js5.2.133 using typescript
javascript·vue.js·typescript·pdf
花开花落的博客2 小时前
uniapp 不同路由之间的区别
前端·uni-app
whatever who cares2 小时前
React 中 useMemo 和 useEffect 的区别(计算与监听方面)
前端·javascript·react.js
老兵发新帖2 小时前
前端知识-hook
前端·react.js·前端框架
2501_915373882 小时前
打造一个 Markdown 编辑器:Electron 项目实战教程
javascript·electron·编辑器
t_hj2 小时前
Ajax的原理和解析
前端·javascript·ajax
蓝婷儿3 小时前
前端面试每日三题 - Day 29
前端·面试·职场和发展