使用 Axios 的 HTTP 获取请求在 URL 的开头使用本地主机 IP 发送

Posted

技术标签:

【中文标题】使用 Axios 的 HTTP 获取请求在 URL 的开头使用本地主机 IP 发送【英文标题】:HTTP get request with Axios gets sent with the local host IP at the beginning of the URL 【发布时间】:2018-08-04 06:09:03 【问题描述】:

我正在尝试使用 Axios 发送 HTTP 请求,但收到 404 错误。原因是请求在 URL 的开头使用本地主机 IP 发送,为什么会发生这种情况?

JS:

function getWeather() 

  axios.get('api.openweathermap.org/data/2.5/weather', 
    params: 
      lat: 30.18,
      lon: 30.87,
      appid: '57d9478bc08bc211f405f45b93b79272'
    
  )
  .then(function(response) 
    console.log(response);
  )

  .catch(function(error) 
    console.log(error);
  )
;
getWeather();  

错误:

http://127.0.0.1:5500/api.openweathermap.org/data/2.5/weather?lat=30.18&lon=30.87&appid=57d9478b#####################3b79272 404 (Not Found)

【问题讨论】:

【参考方案1】:

在 Axios 的 URL 参数中,您没有指定用于 API 请求的协议(可能是 HTTP)。因此,Axios 将其解释为相对 URL 路径并添加本地服务器的路径,因为它需要完整的 URL 才能发出请求。

您可以通过添加 http:// 前缀轻松修复它:

axios.get('http://api.openweathermap.org/data/2.5/weather', 

【讨论】:

【参考方案2】:

您可以在请求之前配置 axios 基本 url

axios.defaults.baseURL = 'http://api.openweathermap.org';
axios.get('/data/2.5/weather')

【讨论】:

axios.defaults.baseURL 如果您要将 axios 导出为 axios.create .....【参考方案3】:

要完全控制 axios 的基本 URL,您可以在 AxiosInstance 创建时指定 baseURL

    var getBaseUrl = () => 
        // custom base URL logic examples:
        // - to request a current URL without the search parameters part:
        let baseUrl = window.location.href.slice(0, -window.location.search.length);

        //// or to insert '/api' after the host part
        //let baseUrl = window.location.host + '/api' + window.location.pathname;

        // ensure slash at the end
        if (baseUrl[baseUrl.length - 1] != '/') baseUrl = baseUrl + '/';

        return baseUrl;
    ;

    var axiosConfig = 
        baseURL: this.getBaseUrl(),
    ;
    var axiosInstance = axios.create(axiosConfig);

    axiosInstance.get('/your-path')
       .then(res => 
           // ...
       );
       // ...

【讨论】:

以上是关于使用 Axios 的 HTTP 获取请求在 URL 的开头使用本地主机 IP 发送的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 axios 的代理

Vue.js 使用 axios 缓存 http 请求

公共接口url请求地址,axios 或 vuesource 测试 请求 get post jsonp

Axios - 在不实际发出请求的情况下获取带有参数的 url

Axios 拦截器配置 - URL 不一样

使用 axios 从 json url 获取图像