[前端]HTTP库Axios
一、Axios简介
Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它是一个流行的 JavaScript 库,用于发起 HTTP 请求,如 GET、POST、DELETE 等。Axios 提供了易于使用的 API,支持请求和响应的拦截、转换数据格式、客户端支持防御 XSRF(跨站请求伪造)等功能。
以下是 Axios 的一些主要特点:
-
从浏览器中创建 XMLHttpRequests:
允许从前端 JavaScript 代码中发送异步HTTP请求。 -
从 node.js 发出 http 请求:
在服务器端环境中,Axios 可以用于发送 HTTP 请求。 -
支持 Promise API:
Axios 提供了基于 Promise 的接口,使得异步请求的处理更加方便。 -
转换请求和响应数据:
自动转换 JSON 数据结构,也可以自定义转换函数。 -
客户端支持防御 XSRF:
Axios 可以配置来防御跨站请求伪造攻击。 -
拦截请求和响应:
允许在请求发送前后或响应返回前后执行拦截操作。 -
取消请求:
提供了取消请求的能力,可以用于防止不必要的网络请求。 -
自动转换 JSON:
Axios 会自动将请求和响应数据转换为 JSON。 -
客户端支持防御 XSRF:
Axios 可以配置来防御跨站请求伪造攻击。
以下是 Axios 的基本使用示例:
// 发送 GET 请求
axios.get('https://api.example.com/data').then(response => {console.log(response.data);}).catch(error => {console.error('Error during fetching:', error);});// 发送 POST 请求
axios.post('https://api.example.com/data', {title: 'Example Title',body: 'This is a new post.',userId: 1}).then(response => {console.log(response.data);}).catch(error => {console.error('Error during posting:', error);});// 使用 async/await
async function fetchData() {try {const response = await axios.get('https://api.example.com/data');console.log(response.data);} catch (error) {console.error('Error during fetching:', error);}
}
要使用 Axios,你可以通过 npm 或 yarn 来安装它:
npm install axios --save
或者
bash
yarn add axios
然后,在你的 JavaScript 代码中引入 Axios 并使用它发起请求。
二、Axios支持的数据格式转换
Axios 支持多种数据格式的转换,这使得在发送请求和接收响应时能够轻松地处理不同格式的数据。以下是 Axios 支持的一些常见数据格式转换:
-
JSON:
Axios 默认会将请求和响应数据转换为 JSON 格式。当你发送一个请求时,Axios 会自动将 JavaScript 对象序列化为 JSON 字符串。同样地,当接收到响应时,Axios 也会自动将 JSON 字符串解析为 JavaScript 对象。 -
URL Encoded Format:
对于表单数据,Axios 可以自动将 JavaScript 对象序列化为application/x-www-form-urlencoded格式,这通常用于 HTML 表单数据的提交。 -
Text:
如果你想要接收纯文本响应,可以在请求配置中设置responseType为'text',这样 Axios 就不会尝试解析响应内容。 -
Blob:
对于二进制数据,如文件下载,你可以设置responseType为'blob'。这样,响应数据将作为 Blob 对象返回,可以用于创建文件或进行进一步的处理。 -
Array Buffer:
对于原始的二进制数据,可以设置responseType为'arraybuffer'。这将返回一个 ArrayBuffer 对象,适用于处理二进制数据流。 -
自定义转换:
Axios 允许你通过transformRequest和transformResponse配置项来添加自定义的数据转换函数。这些函数可以在发送请求之前和接收响应之后对数据进行处理。
以下是如何在 Axios 中设置 responseType 和自定义转换函数的示例:
// 设置响应类型为 blob
axios({url: 'https://api.example.com/file',method: 'get',responseType: 'blob' // 重要
}).then((response) => {// 处理 Blob 数据const url = window.URL.createObjectURL(new Blob([response.data]));const link = document.createElement('a');link.href = url;link.setAttribute('download', 'filename.pdf');document.body.appendChild(link);link.click();link.parentNode.removeChild(link);window.URL.revokeObjectURL(url);
}).catch((error) => {console.error('Error during file download:', error);
});// 自定义转换函数
axios({method: 'post',url: 'https://api.example.com/data',data: {title: 'Example Title',body: 'This is a new post.',userId: 1},transformRequest: [function (data, headers) {// 对 data 进行任意转换处理return data;}],transformResponse: [function (data) {// 对响应数据进行任意转换处理return data;}]
});
通过这些转换功能,Axios 提供了灵活的方式来处理各种类型的数据,满足不同场景下的需求。
三、Axios 处理跨域问题的方法
Axios 在发送请求时处理跨域问题主要有以下几种方法:
1、服务器端设置 CORS(跨源资源共享):
跨域问题的根本解决方案是在服务器端配置 CORS 头。服务器需要设置 Access-Control-Allow-Origin 响应头,以允许特定的域名进行跨域请求。例如,在 Node.js 和 Express 框架中,可以安装 cors 中间件并使用它来允许跨域请求:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors()); // 允许所有来源的跨域请求
如果需要更详细的配置,例如只允许特定的域名访问,可以这样配置:
app.use(cors({origin: 'http://localhost:8080', // 只允许从这个地址的跨域请求methods: ['GET', 'POST'], // 允许的 HTTP 方法allowedHeaders: ['Content-Type', 'Authorization'] // 允许的请求头
}));
2、开发环境中使用代理:
在开发环境中,可以使用 Webpack 开发服务器的代理功能来解决跨域问题。例如,在 Vue CLI 项目中,可以通过修改 vue.config.js 文件来设置代理:
module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:3000',changeOrigin: true,pathRewrite: { '^/api': '' }}}}
}
这样,所有发往 /api 的请求都会被代理到 http://localhost:3000。
3、使用 JSONP:
JSONP 是一种只能支持 GET 请求的跨域解决方案。通过动态创建 <script> 标签来绕过同源策略的限制。
4、使用代理服务器:
在本地启动一个代理服务器,将请求转发到目标服务器,从而避免跨域问题。例如,使用 Node.js 和 Express 搭建一个简单的代理服务器:
const express = require('express');
const axios = require('axios');
const app = express();
const port = 3000;
app.use(express.json());
app.get('/api/data', async (req, res) => {try {const response = await axios.get('https://目标服务器的URL/data');res.json(response.data);} catch (error) {res.status(500).json({ error: 'Failed to fetch data from the target server' });}
});
app.listen(port, () => {console.log(`Proxy server is running on http://localhost:${port}`);
});
然后修改 Axios 请求地址,指向代理服务器即可:
axios.get('http://localhost:3000/api/users')
这些方法可以帮助开发者在使用 Axios 发送请求时解决跨域问题,确保请求能够成功到达目标服务器。
相关文章:
[前端]HTTP库Axios
一、Axios简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它是一个流行的 JavaScript 库,用于发起 HTTP 请求,如 GET、POST、DELETE 等。Axios 提供了易于使用的 API,支持请求和响应的拦截、转换数据格…...
vue3入门教程:reactive函数
基本用法 引入 reactive 首先,你需要从 vue 包中引入 reactive 函数: import { reactive } from vue;创建一个响应式对象 使用 reactive 函数来创建一个响应式对象: const state reactive({count: 0,name: Vue 3 });在这个例子中,…...
SDMTSP:黑翅鸢算法(Black-winged kite algorithm,BKA)求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)
一、黑翅鸢算法BKA 黑翅鸢算法(Black-winged kite algorithm,BKA)由Wang Jun等人于2024年提出,该算法受黑翅鸢的迁徙和掠食行为启发而得。BKA集成了柯西突变策略和领导者策略,增强了算法的全局搜索能力,提…...
叉车作业如何确认安全距离——UWB测距防撞系统的应用
叉车在工业环境中运行,常常需要在狭窄的空间内完成货物的搬运和堆垛,这对操作员的技术水平和安全意识提出了极高的要求。传统的叉车作业依赖操作员的经验和视觉判断来确认安全距离,然而这种方式往往存在误差,特别是在视线受阻或光…...
5-Gin 静态文件服务 --[Gin 框架入门精讲与实战案例]
在使用 Gin 框架开发 Go 语言应用程序时,提供静态文件服务(如 HTML、CSS、JavaScript 文件等)是一个常见的需求。Gin 提供了简单的方法来设置静态文件的路由,使得你可以轻松地将这些资源提供给客户端。 使用 Static 方法 最直接…...
【自动驾驶】3 激光雷达③
5 激光雷达点云检测模型 🦋🦋🦋CenterPoint是Anchor‐Free的3D物体检测器,以点云作为输入,将三维物体在Bird‐View下的中心点作为关键点,基于关键点检测的方式回归物体的尺寸、方向和速度。相比于Anchor‐…...
Vue 3.5 编写 ref 时,自动插入.Value
如果是 Vue 3.2 ,那么可能用的是Volar...
从0到1实现一个RS蓝图系统-概念提出技术栈选型
请不要自我设限,真正好的人生态度,是现在就做,不等、不靠、不懒惰。 ——小野《改变力》 一、什么是蓝图? 蓝图(BluePrint) 是Epic Games 针对虚幻4引擎开发的可视化脚本语言。当你使用蓝图的时候,其实就是在编写代码…...
npm淘宝镜像
通过命令行配置npm的淘宝镜像源和官方镜像源,以及如何安装和使用cnpm来解决安装包卡顿或无法安装的问题。通过设置registry和disturl,配合清理缓存,可以优化npm的下载速度。 1、官方默认镜像 npm config set registry https://registry.n…...
深入解析:Python中的决策树与随机森林
在这个数据驱动的时代,机器学习技术已经成为许多企业和研究机构不可或缺的一部分。其中,决策树和随机森林作为两种强大的算法,在分类和回归任务中表现尤为出色。本文将带领大家深入了解这两种算法在Python中的实现,从基础到实战&a…...
奇怪问题| Chrome 访问csdn 创作中心的时候报错: 服务超时,请稍后重试
Chrome 访问csdn 创作中心的时候报错: 服务超时,请稍后重试用无痕浏览器可以正常访问 关闭代理无效清缓存和Cookies无效。考虑无痕浏览器模式下插件不生效,尝试把chrome 插件也禁用,发现有效,是该扩展程序的缘故...
【Leetcode】1705. 吃苹果的最大数目
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 有一棵特殊的苹果树,一连 n n n 天,每天都可以长出若干个苹果。在第 i i i 天,树上会长出 a p p l e s [ i ] apples[i] apples[i] 个苹果&a…...
职业技能赛赛后心得
这是一位粉丝所要求的,也感谢这位粉丝对我的支持。 那么本篇文章我也是分成四个部分,来总结一下这次赛后心得。 赛中问题 那么这里的赛中问题不会只包含我所遇到的问题,也会包含赛中其他选手出现的问题。 那么首先我先说一下我在赛中遇到的…...
从AI换脸到篡改图像,合合信息如何提升视觉内容安全?
本文目录 引言一、AI“真假之战”下的发展现状与考验挑战1.1 视觉内容安全现状与技术分类1.2视觉内容安全企业1.3视觉内容安全领域挑战 二、开山之石:引领视觉内容安全的创新之路2.1合合内容安全系统2.2发起编制相关技术规范2.3参与篡改检测挑战赛 三、视觉内容安全…...
c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入
1. 日志目录和文件管理 日志目录:日志文件存储在 ./Exceptions 目录下。日志文件命名:日志文件的命名格式为 yyyy_MM_dd.log,表示当天的日期。如果当天的日志文件大小超过 maxFileSizeBytes(3KB),则会创建…...
webrtc学习----前端推流拉流,局域网socket版,一对多
提示:局域网socket版,一对多 文章目录 [TOC](文章目录) 前言一、教程二、webrtc工作流程三、推流端四、拉流五、socket服务六、效果七、备注总结 前言 WebRTC(Web Real-Time Communication)是一种实时通讯技术,允许网…...
美国加州房价数据分析01
1.项目简介 本数据分析项目目的是分析美国加州房价数据,预测房价中值。 环境要求: ancondajupyter notebookpython3.10.10 虚拟环境: pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…...
用Python开启人工智能之旅(四)深度学习的框架和使用方法
第四部分:深度学习的框架和使用方法 用Python开启人工智能之旅(一)Python简介与安装 用Python开启人工智能之旅(二)Python基础 用Python开启人工智能之旅(三)常用的机器学习算法与实现 用Pyt…...
两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器
问题原因 remote-ssh还是有一些bug的,在跟新之后可能会一直加载初始化SSH主机解决方案 1.打开终端2.登录链接vscode的账号,到家目录下3.找到 .vscode-server文件,删掉这个文件4.重启 vscode 就没问题了...
信号仿真高级工程师面试题
信号仿真高级工程师面试题可能涵盖多个方面,旨在全面评估应聘者的专业知识、技能水平、实践经验和问题解决能力。以下是一些可能的面试题及其简要解析: 一、专业知识与技能 描述你对信号仿真的理解 考察点:对信号仿真基本概念、原理及应用的掌握程度。参考答案:信号仿真是…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
RabbitMQ 各类交换机
为什么要用交换机? 交换机用来路由消息。如果直发队列,这个消息就被处理消失了,那别的队列也需要这个消息怎么办?那就要用到交换机 交换机类型 1,fanout:广播 特点 广播所有消息:将消息…...
Axure Rp 11 安装、汉化、授权
Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...
uni-app学习笔记二十七--设置底部菜单TabBar的样式
官方文档地址:uni.setTabBarItem(OBJECT) | uni-app官网 uni.setTabBarItem(OBJECT) 动态设置 tabBar 某一项的内容,通常写在项目的App.vue的onLaunch方法中,用于项目启动时立即执行 重要参数: indexnumber是tabBar 的哪一项&…...
