网页注入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 请求的发送和响应的处理。
相关推荐
Jonathan Star3 小时前
沉浸式雨天海岸:用A-Frame打造WebXR互动场景
前端·javascript
工业甲酰苯胺4 小时前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫4 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
LilySesy4 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv
Wang's Blog5 小时前
前端FAQ: Vue 3 与 Vue 2 相⽐有哪些重要的改进?
前端·javascript·vue.js
再希5 小时前
React+Tailwind CSS+Shadcn UI
前端·react.js·ui
用户47949283569156 小时前
JavaScript 的 NaN !== NaN 之谜:从 CPU 指令到 IEEE 754 标准的完整解密
前端·javascript
群联云防护小杜6 小时前
国产化环境下 Web 应用如何满足等保 2.0?从 Nginx 配置到 AI 防护实战
运维·前端·nginx
醉方休6 小时前
Web3.js 全面解析
前端·javascript·electron
前端开发爱好者7 小时前
前端新玩具:Vike 发布!
前端·javascript