我需要从不同的域名调用网页。当我从浏览器调用此页面时,它会正常响应。但是当我从服务器端代码或jquery ajax脚本调用它时,它会响应空xml。
我正在尝试调用这样的页面或服务:
这通常来自浏览器。但是当我写这样的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
所以我不明白该怎么做,我无法应用所描述的解决方案。
答案 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请求标头,然后只需添加这些标头。