如何从不同的域呼叫网页/服务?

时间:2012-06-29 17:16:31

标签: c# jquery asp.net cross-domain

我需要从不同的域名调用网页。当我从浏览器调用此页面时,它会正常响应。但是当我从服务器端代码或jquery ajax脚本调用它时,它会响应空xml。

我正在尝试调用这样的页面或服务:

http://www.otherdomain.com/oddsData.jsp?odds_flash_id=11&odds_s_type=1&odds_league=all&odds_period=all&me_select_string=&q=93801

这通常来自浏览器。但是当我写这样的c#代码时:

WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5";
wc.Headers[HttpRequestHeader.Accept] = "*/*";
wc.Headers[HttpRequestHeader.AcceptCharset] = "ISO-8859-1,utf-8;q=0.7,*;q=0.3";
wc.Headers[HttpRequestHeader.AcceptEncoding] = "gzip,deflate,sdch";
wc.Headers[HttpRequestHeader.AcceptLanguage] = "en-US,en;q=0.8";
wc.Headers[HttpRequestHeader.Host] = "otherdomain.com";
var response = wc.DownloadString("http://www.otherdomain.com/oddsData.jsp?odds_flash_id=11&odds_s_type=1&odds_league=all&odds_period=all&me_select_string=&q=93801");
Response.Write(response);

我得到空的xml作为回复:

<xml></xml>

如何从浏览器获得的服务器端代码或客户端获得相同的响应?

我在这里尝试了解决方案:Calling Cross Domain WCF service using Jquery

所以我不明白该怎么做,我无法应用所描述的解决方案。

1 个答案:

答案 0 :(得分:1)

  

如何从浏览器获得的服务器端代码或客户端获得相同的响应?

由于same origin policy限制,您无法从浏览器发送跨域AJAX请求。

另一方面,从.NET可以很好地发送此请求。但是,您尝试发送请求的Web服务器可能需要一些HTTP标头,例如User-Agent标头。因此,请确保您已在请求中提供了服务器所需的所有标头。例如,添加User-Agent标题:

using (WebClient wc = new WebClient())
{
    wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5";
    var response = wc.DownloadString("http://www.otherdomain.com/oddsData.jsp?odds_flash_id=11&odds_s_type=1&odds_league=all&odds_period=all&me_select_string=&q=93801");
    Response.Write(response);
}

您可以使用FireBug或Chrome开发人员工具栏检查浏览器在有效请求中发送的所有HTTP请求标头,然后只需添加这些标头。