2017-04-16 76 views
0

我正在开发webpack-dev-server。 当我尝试访问{api_key}时,我无法访问http://api.openweathermap.org/data/2.5/forecast?id=2848756&appid=,并且我可以看到此日志。如何接受webpack的api访问?

XMLHttpRequest无法加载http://api.openweathermap.org/data/2.5/forecast?id= {api_key}。预检的响应具有无效的HTTP状态代码405

我尝试在webpack.config.js上设置。这就像波纹管的设置。

devServer: { 
    contentBase: 'dist', 
    inline: true, 
    hot:true, 
    port: 8081, 
    proxy: { 
    '/**': { 
    target: 'http://api.openweathermap.org', 
    secure: false 
    } 
} 

但它仍然不起作用。你知道如何解决它吗? 让我知道。谢谢!

回答

1

尝试从您的通话axios.create()取出headers财产,他们没有任何意义(在Access-Control-*的有响应头,而不是请求头,并withCredentials是一种选择,而不是头),并可能会混淆浏览器,以为它需要执行CORS预检这看起来并不像它是由OpenWeather API服务器应该:

const apiClient = API_URL => { 
    return axios.create({ 
    baseURL   : API_URL, 
    timeout   : 100000, 
    withCredentials : 'true' 
    }); 
}; 
+0

我明白了。当我尝试使用您的设置时,出现了另一个错误,然后尝试使用波纹管设置。 '常量forecastApiClient =()=> { 返回axios.create({ 基本URL:FORECAST_API_URL, 超时:100000, 标头:{ '访问控制允许来源':“的http://本地主机:8081 ”, '接入控制允许集管': '起源,X-请求-随着,内容类型,接受' }, withCredentials:真 }); };' 但它有另一个错误。我写错误的下一条评论。 –

+0

'对预检请求的响应未通过访问控制检查:当请求的凭证模式为'包含'时,响应中的'Access-Control-Allow-Origin'标头的值不能为通配符'*'。原因'http:// localhost:8081'因此不被允许访问。由XMLHttpRequest发起的请求的证书模式由withCredentials属性控制。# 我设置我的webpack-dev-server url为'http:// localhost:8081'。我不知道它为什么不能访问。 –

+0

尝试删除'withCredentials',它甚至可能不是必需的。要清楚:不要在您的请求中发送_any_标头。 – robertklep

2

您将有后,你会得到你将不得不使用针对你的情况调用API

API密钥,同时呼吁

http://api.openweathermap.org/data/2.5/forecast?id=2848756&appid= {API_KEY}

开放的天气API的网站上注册

请在上面的通话中注册后插入api_key。注册后,你会得到API_KEY为= XXXXXXX

使用它上面的调用 http://api.openweathermap.org/data/2.5/forecast?id=2848756&appid=xxxxxxx

然后,然后你会在JSON响应接收数据 假设。 更多信息,请访问

https://openweathermap.org/appid

+0

感谢,说实话,我已经拿到API_KEY和设置。 当我在浏览器上访问此URL时,我可以访问。但我无法在网络包-dev-server上访问它。 也许,我做错误axios设置? 我的axios设置是波纹管。 '常量apiClient =(API_URL)=> { 返回axios.create({ 基本URL:API_URL, 超时:100000, 标头:{ '访问控制允许来源': '*', “访问 - 控制 - 允许报头: '起源,X-请求-随着,内容类型,接受', 'xhrFields':{ 'withCredentials': '真' } } }); };' –

+0

通常,出于安全原因,访问外部API会被服务器阻止。 转到您的服务器并打开控制台并编写telnet命令,例如。 telnet http://api.openweathermap.org/data/2.5/forecast?id=2848756&appid={api_key}如果没有连接意味着访问上面的api被阻止 –

+0

@PawanPatil如果它被阻止,它不会返回一个405状态回复 – robertklep