asp.net使用HttpwebRequest如何解决跨域的问题

zqaaa1988 2012-03-06 09:39:24

最近在用WIndowForm写一个模拟百度推广的登录,使用HttpwebRequest,但是最后一直没有登录成功,返回的值一直是空的,不知道是什么原因,后来再网上查了一下说是可能是跨域的问题,但是我最后修改了Cookie的Domain,也没有反应,不知道有什么更好的方法啊?一下是代码,请各位高手指教

/// <summary>
/// 使用Get提交获得Stream二进制流
/// </summary>
/// <param name="targerUrl">访问路径</param>
/// <param name="contentType">内容类型</param>
/// <param name="referer">设置标头的值</param>
/// <returns></returns>
public Stream GetAndStream(string targetUrl, string contentType, string referer)
{
//创建Request对象
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUrl);
request.ContentType = contentType; //给ContentType赋值
request.CookieContainer = cc; //保存cookie
request.Method = "GET"; //提交的方法
request.AllowAutoRedirect = false; //Internet资源重定向
request.Referer = referer; //设置标头的值
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)";
request.KeepAlive = true;

OnSendingHeaders(request);
//创建response对象
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string setCookie = response.Headers["Set-Cookie"];
OnHttpSet(response);
cc.Add(response.Cookies); //保存cookie
//创建二进制流
Stream stream = response.GetResponseStream();
return stream;
}

public void OnHttpSet(HttpWebResponse response)
{
if (response.Cookies != null && response.Cookies.Count > 0)
{
foreach (Cookie c in response.Cookies)
{
c.Domain = "fengdao.baidu.com";
}
}

}

public void OnSendingHeaders(HttpWebRequest httpWebRequest)
{
try
{
if (httpWebRequest.CookieContainer != null)
{
//string str;
httpWebRequest.Headers.Remove("Cookie");
string cookieHeader = httpWebRequest.CookieContainer.GetCookieHeader(httpWebRequest.Address);
if (cookieHeader.Length > 0)
{
httpWebRequest.Headers["Cookie"] = cookieHeader;
}
}

}
catch (Exception)
{

throw;
}
}
...全文
598 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shungang1988 2014-01-17
  • 打赏
  • 举报
回复
哥们,能分享一下是怎么解决的么
zqaaa1988 2012-03-10
  • 打赏
  • 举报
回复
已经解决了,少操作了一步跳转操作,也不需要修改Domain
zqaaa1988 2012-03-06
  • 打赏
  • 举报
回复
我用httpwatch抓包工具都抓取了想要的参数,为什么最后还是登录不成功呢?
有哪位高手可以指教一下啊!
zqaaa1988 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 net_lover 的回复:]

Domain应该设置成主域吧
c.Domain = "baidu.com";
[/Quote]

还是不行啊,我获得的那个Stream老是提示“Length = “stream.Length”引发了“System.NotSupportedException”类型的异常”,这是什么原因啊?
孟子E章 2012-03-06
  • 打赏
  • 举报
回复
Domain应该设置成主域吧
c.Domain = "baidu.com";

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧