【发布时间】:2018-02-12 16:31:17
【问题描述】:
我不确定我是否理解这一点。我可以编写一个简单的服务器端代码来抓取任何网站的 HTML 内容。在我的本地 PC 或任何主机上运行它并从任何网站检索任何页面。但这不能通过 javaScript 完成?
远程主机怎么可能知道什么样的应用程序正在发出请求?出于安全目的,不允许跨源请求?为什么我可以使用服务器端代码发出完全相同的请求?并在任何地方本地或远程运行此代码?下面是一个从 Weather 站点获取 HTML 页面内容的简单示例,效果很好。但我不能在 JavaScript 代码中做到这一点?没有意义。
public static class WeatherManager
{
private static HtmlDocument document = new HtmlDocument();
public static MyWeather GetWeather()
{
try
{
var web = new HtmlWeb();
document = web.Load("http://www.weatheroffice.gc.ca/city/pages/on-143_metric_e.html");
}
catch (Exception ex)
{
throw new Exception("Weather is not loaded");
}
var mainContent = document.DocumentNode.SelectSingleNode("//*[@id='mainContent']");
var nownode = mainContent.SelectSingleNode("//section[1]/details/div/div");
var forecastnodes = mainContent.SelectNodes("//section[2]/details/table[1]/tr[2]/td");
// Do some processing....
}
}
但是当我尝试从 Angular(或任何我认为的 JS lib)发出类似的请求时
getWeatherForecast() {
const url = 'https://weather.gc.ca/city/pages/on-143_metric_e.html';
return this.$http.get(url);
}
我得到了这样的东西
我知道... CORS 好的,但如果它是出于安全目的,我怎么能以我喜欢的方式发出这些 CORS 请求,例如上面的服务器端代码?
【问题讨论】:
标签: javascript c# angularjs asp.net-mvc cors