1

我需要调用来自不同域的网页。当我从浏览器调用此页面时,它会正常响应。但是当我从服务器端代码或 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

这通常从浏览器响应。但是当我像这样编写 ac# 代码时:

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

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

4

1 回答 1

1

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

由于同源策略限制,您不能从浏览器发送跨域 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 请求标头,然后简单地添加这些标头。

于 2012-06-29T17:19:36.470 回答