【发布时间】:2019-05-29 12:45:52
【问题描述】:
我在我的应用程序中访问 IBM Weather API。
当我尝试使用 PHP 访问时:
$auth = base64_encode("<username>:<password>");
$context = stream_context_create([
"http" => [
"header" => "Authorization: Basic $auth"
]]);
$homepage = file_get_contents("https://twcservice.eu-gb.mybluemix.net/api/weather/v1/geocode/49.14/15.00/forecast/daily/3day.json?language=en-US&units=m", false, $context );
echo($homepage);
有效。
但是当我尝试使用 Javascript 访问时:
let headers = new Headers();
headers.append("Content-Type", "application/json");
headers.append("Authorization", "Basic " + btoa("<username>" + ":" + "<password>"));
fetch("https://twcservice.eu-gb.mybluemix.net/api/weather/v1/geocode/"+lat.toFixed(2)+"/"+lng.toFixed(2)+"/forecast/daily/3day.json?language=en-US&units=m", {headers: headers})
.then(function(response) {
console.log(response);
return response.json();
})
.then(function(json) {
for(let i = 0; i <= 3; i++) {
console.log(json['forecasts'][i]['dow']+" - "+json['forecasts'][i]['narrative']);
}
});
它给了我 CORS 错误消息。
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://twcservice.eu-gb.mybluemix.net/api/weather/v1/geocode/49.14/15.00/forecast/daily/3day.json?language=en-US&units=m. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘https://*.ibm.com, https://*.ibmcloud.com’).
我不明白为什么。
感谢您的帮助!
如果 IBM Weather API 害怕窃取其内容,为什么它与 PHP 一起工作?
我不明白。
【问题讨论】:
-
我编辑了我之前的帖子。
-
请阅读 CORS。这不是关于 IBM,而是关于浏览器的安全性。您的浏览器正在阻止这种情况发生 - 而不是 IBM。 developer.mozilla.org/en-US/docs/Web/HTTP/CORS
-
浏览器阻止了我写代码的东西,所以我想要它。
-
那为什么不直接在php中做呢?
标签: javascript php ibm-cloud