网络请求库 – axios库

简介: 网络请求库 – axios库

1.认识Axios库
Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中发送网络请求。

1.1 Axios的优点
XMLHttpRequest,fetch是高级一点的原生
原生的缺点:
1.需要自己来封装原生。
2.原生某些功能不具备,你需要自己来完成请求拦截,响应拦截等。
3.js可以跑在浏览器和node上面,但是原生的fetch是不能工作在node中,node需要使用别的api。比如http模块来发送请求。

使用axios的优点
1.已经帮我们把原生的底层逻辑都封装了。
2.还额外增加了拦截器等功能
3.适配浏览器和node。axios已经帮我们封装好了,在在浏览器中发送 XMLHttpRequests 请求,在 node.js 中发送 http请求。不用担心在不同的平台使用不同的api

1.2 功能特点
在浏览器中发送 XMLHttpRequests 请求
在 node.js 中发送 http请求
支持 Promise API
拦截请求和响应
转换请求和响应数据
等等
1.3 安装axios
在项目中安装axios
npm install axios

2.发送常见的请求和配置
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])
在main.js中

import {
    createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'

const app = createApp(App)
app.use(router)
app.use(store)
app.mount('#app')

//1.发送request请求
axios
  .request({
   
    url: 'http://123.207.32.32:8000/home/multidata',
    method: 'get'
  })
  .then((res) => {
   
    console.log('res: ', res.data)
  })

//request里面的参数中的method里面写get的话,就和axios.get一样了,method不写的话,默认是get

//2.发送get请求(带参数有两种写法,第二种用的比较多)
axios.get('http://123.207.32.32:9001/lyric?id=500665346').then((res) => {
   
  console.log('res: ', res.data)
})

axios
  .get('http://123.207.32.32:9001/lyric', {
   
    params: {
   
      id: 500665346
    }
  })
  .then((res) => {
   
    console.log('res: ', res.data)
  })

//3.post 请求(2种方法)
axios
  .post('http://123.207.32.32:1888/02_param/postjson', {
   
    name: 'why',
    age: 18,
    height: 1.88
  })
  .then((res) => {
   
    console.log('res: ', res.data)
  })
//这种写法第二个 参数是data

//4.post请求方法二,直接把第二个参数当作config, 把data写道config里面
axios
  .post('http://123.207.32.32:1888/02_param/postjson', {
   
    data: {
   
      name: 'why',
      age: 18,
      height: 1.88
    }
  })
  .then((res) => {
   
    console.log('res: ', res.data)
  })

httpbin.org/get发送get 请求,httpbin.org/post发送post请求
用来做测试

3.常见的配置选项

image.png

3.1baseURL

import axios from 'axios'

const app = createApp(App)
app.use(router)
app.use(store)
app.mount('#app')

//发送多个请求,后面的地址是不一样的,baseURL可以解决这个问题
// 给axios实例配置公共的基础配置
const baseURL = 'http://123.207.32.32:8000'
axios.defaults.baseURL = baseURL
//也可以配置timeout
axios.defaults.timeout = 10000
//axios.defaults.headers = {}

//1.1 get:/home/multidata
//自动拼接,实际上是http://123.207.32.32:8000/home/multidata
axios.get('/home/multidata').then((res) => {
   
  console.log('res: ', res.data)
})

3.2 axios.all
◼ 有时候, 我们可能需求同时发送两个请求

使用axios.all, 可以放入多个请求的数组.
希望数据都有请求之后再拿到数据

axios.all([]) 返回的结果是一个数组,使用 axios.spread 可将数组 [res1,res2] 展开为 res1, res2
// 2.axios发送多个请求
//本质就是使用了 Promise.all
axios
  .all([
    axios.get('/home/multidata'),
    axios.get('http://123.207.32.32:9001/lyric?id=500665346')
  ])
  .then((res) => {
   
    console.log('res:', res)
  })

image.png

4.创建axios实例
◼ 为什么要创建axios的实例呢?

当我们从axios模块中导入对象时, 使用的实例是默认的实例;
当给该实例设置一些默认配置时, 这些配置就被固定下来了.
但是后续开发中, 某些配置可能会不太一样;
比如某些请求需要使用特定的baseURL或者timeout等.
这个时候, 我们就可以创建新的实例, 并且传入属于该实例的配置信息.
直接这么使用,这里axios也是一个实例,是axios默认库提供给我们的实例,实际项目种不使用这个实例来发送请求,所有的请求都是一样的设置。

import axios from 'axios'
axios
  .request({
   
    url: 'http://123.207.32.32:8000/home/multidata',
    method: 'get'
  })
  .then((res) => {
   
    console.log('res: ', res.data)
  })
// axios默认库提供给我们的实例对象
axios.get("http://123.207.32.32:9001/lyric?id=500665346")

// 创建其他的实例发送网络请求
const instance1 = axios.create({
   
  baseURL: "http://123.207.32.32:9001",
  timeout: 6000,
  headers: {
   }
})

instance1.get("/lyric", {
   
  params: {
   
    id: 500665346
  }
}).then(res => {
   
  console.log("res:", res.data)
})

const instance2 = axios.create({
   
  baseURL: "http://123.207.32.32:8000",
  timeout: 10000,
  headers: {
   }
})

5.请求和响应拦截器
◼ axios的也可以设置拦截器:拦截每次请求和响应
axios.interceptors.request.use(请求成功拦截, 请求失败拦截)
// fn1: 请求发送成功会执行的函数
// fn2: 请求发送失败会执行的函数

◼ axios.interceptors.response.use(响应成功拦截, 响应失败拦截)
// fn1: 数据响应成功(服务器正常的返回了数据 200或者200多,都是成功的状态)
//fn2:服务器响应400+或者500+的时候调用这个函数

//对实例配置拦截器
//两个参数,一个请求成功的回调拦截,一个是请求失败的回调拦截
axios.interceptors.request.use(
  (config) => {
   
//config是发送请求时候的参数,并且用完之后要给人家返回出去
//用的时候可以做一些别的操作,比如改变config.url=XXX之类的,变换地址

    console.log('请求成功拦截')
    // 1.开始loading的动画

    // 2.对原来的配置进行一些修改
    // 2.1. header
    // 2.2. 认证登录: token/cookie
    // 2.3. 请求参数进行某些转化
    return config
  },
  (err) => {
   
    console.log('请求失败拦截')
    return err
  }
)
axios.interceptors.response.use(
  (res) => {
   
    console.log('响应成功的拦截')
    return res
  },
  (err) => {
   
    console.log('服务器响应失败')
    return err
  }
)

axios.interceptors.response.use(
  (res) => {
   ////这个res是响应回来的数据
    console.log('响应成功拦截')
    // 1.结束loading的动画

    // 2.对数据进行转化, 再返回数据
    return res.data
  },
  (err) => {
   
    console.log('服务器响应失败')
    return err
  }
)

axios.get(`http://123.207.32.32:9001/lyric?id=500665346`).then((res) => {
   
  console.log('res:', res)
})

6.axios请求库封装(简洁版)
在src文件夹里面创建service文件夹
与服务器沟通有关的文件放里面
创建index.js

import axios from "axios";

class HYRequest {
   
  constructor(baseURL, timeout = 10000) {
   
    this.instance = axios.create({
   
      baseURL,
      timeout,
    });
  }
  request(config) {
   
    return this.instance.request(config).then((res) => {
   
      return res.data;
    });
  }
  get(config) {
   
    return this.request({
    ...config, method: "get" });
  }
  post(config) {
   
    return this.request({
    ...config, method: "post" });
  }
}

export default new HYRequest("http://123.207.32.32:9001");

main.js

import {
    createApp } from "vue";
import axios from "axios";
import App from "./App.vue";
import hyRequest from "./service";

createApp(App).mount("#app");

hyRequest
  .request({
   
    url: "/lyric?id=500665346",
  })
  .then((res) => {
   
    console.log("res:", res);
  });

hyRequest
  .get({
   
    url: "/lyric",
    params: {
   
      id: 500665346,
    },
  })
  .then((res) => {
   
    console.log("res:", res);
  });
目录
相关文章
|
4月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
84 4
|
4月前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【7月更文挑战第31天】互联网的发展使网络编程成为软件开发的关键部分. Python以简洁、功能强大著称, 在此领域尤显突出. `urllib`作为标准库, 自Python初期便支持URL处理, 如读取URL (`urllib.request`) 和解析 (`urllib.parse`). 尽管API底层, 但奠定了网络编程基础.
61 4
|
2月前
|
JSON 资源调度 JavaScript
Vue框架中Ajax请求的实现方式:使用axios库或fetch API
选择 `axios`还是 `fetch`取决于项目需求和个人偏好。`axios`提供了更丰富的API和更灵活的错误处理方式,适用于需要复杂请求配置的场景。而 `fetch`作为现代浏览器的原生API,使用起来更为简洁,但在旧浏览器兼容性和某些高级特性上可能略显不足。无论选择哪种方式,它们都能有效地在Vue应用中实现Ajax请求的功能。
42 4
|
2月前
|
数据采集 JSON API
🎓Python网络请求新手指南:requests库带你轻松玩转HTTP协议
本文介绍Python网络编程中不可或缺的HTTP协议基础,并以requests库为例,详细讲解如何执行GET与POST请求、处理响应及自定义请求头等操作。通过简洁易懂的代码示例,帮助初学者快速掌握网络爬虫与API开发所需的关键技能。无论是安装配置还是会话管理,requests库均提供了强大而直观的接口,助力读者轻松应对各类网络编程任务。
115 3
|
2月前
|
机器学习/深度学习 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
在数据驱动的时代,网络数据抓取对于数据分析、机器学习等至关重要。HTTP协议作为互联网通信的基石,其重要性不言而喻。Python的`requests`库凭借简洁的API和强大的功能,成为网络数据抓取的利器。本文将通过实战演练展示如何使用`requests`库进行数据抓取,包括发送GET/POST请求、处理JSON响应及添加自定义请求头等。首先,请确保已安装`requests`库,可通过`pip install requests`进行安装。接下来,我们将逐一介绍如何利用`requests`库探索网络世界,助你成为数据抓取大师。在实践过程中,务必遵守相关法律法规和网站使用条款,做到技术与道德并重。
52 2
|
2月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
67 3
|
2月前
|
数据采集 网络协议 API
HTTP协议大揭秘!Python requests库实战,让网络请求变得简单高效
【9月更文挑战第13天】在数字化时代,互联网成为信息传输的核心平台,HTTP协议作为基石,定义了客户端与服务器间的数据传输规则。直接处理HTTP请求复杂繁琐,但Python的`requests`库提供了一个简洁强大的接口,简化了这一过程。HTTP协议采用请求与响应模式,无状态且结构化设计,使其能灵活处理各种数据交换。
79 8
|
2月前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
51 7
|
2月前
|
网络协议 Linux C++
超级好用的C++实用库之网络
超级好用的C++实用库之网络
45 0
WK
|
2月前
|
数据采集 XML 安全
常用的Python网络爬虫库有哪些?
Python网络爬虫库种类丰富,各具特色。`requests` 和 `urllib` 简化了 HTTP 请求,`urllib3` 提供了线程安全的连接池,`httplib2` 则具备全面的客户端接口。异步库 `aiohttp` 可大幅提升数据抓取效率。
WK
62 1