网页注入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 请求的发送和响应的处理。
相关推荐
快乐的小前端1 分钟前
TypeScript基础一
前端
北凉温华2 分钟前
UniApp项目中的多服务环境配置与跨域代理实现
前端
源柒3 分钟前
Vue3与Vite构建高性能记账应用 - LedgerX架构解析
前端
Danny_FD4 分钟前
常用 Git 命令详解
前端·github
卫崽4 分钟前
JavaScript 中的 ?? 与 || 运算符详解
javascript·面试
stanny4 分钟前
MCP(上)——function call 是什么
前端·mcp
1024小神10 分钟前
GitHub action中的 jq 是什么? 常用方法有哪些
前端·javascript
彩云飘14 分钟前
【Electron】macOS发布第二个应用(签名+公正部分)
前端
逆袭的小黄鸭16 分钟前
JavaScript 开发必备规范:命名、语法与代码结构指南
前端·javascript·面试
松前卡气加超级漂17 分钟前
Django:高效构建现代Web应用的利器
前端·python·django