100分!HttpWebrequest请求一个存在页面,但是报404错误,太诡异了,有用回答就给分

silence1214 2011-07-28 08:28:48
static void Main(string[] args)
{
try
{
Console.WriteLine("Begin...");

Console.WriteLine("打开登陆页面...");

// 设置cookie的container
CookieContainer cookieContainer = new CookieContainer();

// 设置一些公用的请求头
NameValueCollection collection = new NameValueCollection();
collection.Add("Accept-Language", "zh-cn,zh;q=0.5");
collection.Add("Accept-Encoding", "gzip,deflate");
collection.Add("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
collection.Add("Keep-Alive", "115");

// 先请求登陆页面
HttpWebRequest requestLoginPage = (HttpWebRequest)WebRequest.Create("http://www.99inf.com/e/member/login/");
requestLoginPage.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
requestLoginPage.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
requestLoginPage.Headers.Add(collection);
requestLoginPage.CookieContainer = cookieContainer;
HttpWebResponse responseLoginPage = (HttpWebResponse)requestLoginPage.GetResponse();
Console.WriteLine("打开登陆页面状态:{0}", responseLoginPage.StatusCode);

Stream stream = new GZipStream(responseLoginPage.GetResponseStream(), CompressionMode.Decompress);
StreamReader reader = new StreamReader(stream, Encoding.Default);
String content = reader.ReadToEnd();
// Console.WriteLine("{0}", content);




// 来Post数据到登陆页面
HttpWebRequest requestLoginToPage = (HttpWebRequest)WebRequest.Create("http://www.99inf.com/e/enews/index.php");
requestLoginToPage.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
requestLoginToPage.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
requestLoginToPage.ContentType = "application/x-www-form-urlencoded";
requestLoginToPage.Method = "POST";
requestLoginToPage.Headers.Add(collection);

requestLoginToPage.CookieContainer = cookieContainer;
requestLoginToPage.Referer = "http://www.99inf.com/e/member/login/";
requestLoginToPage.AllowAutoRedirect = false;

Console.WriteLine(requestLoginToPage.RequestUri);

String data = "ecmsfrom=&enews=login&username=1234&password=1234&lifetime=0&Submit=";
byte[] bytes = Encoding.ASCII.GetBytes(data);
requestLoginToPage.ContentLength = bytes.Length;
Stream streamLoginToPage = requestLoginToPage.GetRequestStream();
streamLoginToPage.Write(bytes, 0, bytes.Length);
streamLoginToPage.Flush();
streamLoginToPage.Close();
HttpWebResponse responseLoginToPage = (HttpWebResponse)requestLoginToPage.GetResponse();
Console.WriteLine("Post数据结果状态:{0}", responseLoginToPage.StatusCode);

Console.Read();
}
catch (Exception e)
{

Console.Write(e.Message);
}
Console.Read();
}


这两个地址都是存在的,不信大家可以访问直接,但是我第二个步骤中总是报错404,这个是源码大家可以复制来测试。

另外我还想知道,按照道理在第一步的request之后,CookieContainer中就应该有cookie了,但是调试发现没有

2个问题 谢谢
...全文
877 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
axiang669 2014-03-26
  • 打赏
  • 举报
回复
大哥你用wireshark怎么捕获出expect问题来的呢?
silence1214 2011-08-02
  • 打赏
  • 举报
回复
是呀,最初对那些抓包工具不熟悉
[Quote=引用 15 楼 litaoye 的回复:]
那说明post的东西还是不完全一样呀。


引用 14 楼 silence1214 的回复:
我解决了,是HttpWebRequest多了个请求头Expect导致的。。。nnd。。
[/Quote]
silence1214 2011-07-30
  • 打赏
  • 举报
回复
我最开始以为自动重定向到了一个不存在的url,所以给禁止了,其实打开也是还是这个错误。
再次申明下,这个地址是存在的,你看到的页面会提示你来路不正确,但是这是个http status为200的提示。并不是404的本质错误哈
绿色夹克衫 2011-07-30
  • 打赏
  • 举报
回复
那说明post的东西还是不完全一样呀。

[Quote=引用 14 楼 silence1214 的回复:]
我解决了,是HttpWebRequest多了个请求头Expect导致的。。。nnd。。
[/Quote]
silence1214 2011-07-30
  • 打赏
  • 举报
回复
我解决了,是HttpWebRequest多了个请求头Expect导致的。。。nnd。。
机器人 2011-07-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xmyjd 的回复:]

requestLoginToPage.AllowAutoRedirect = true;
加一些这个,允许重定向
[/Quote]

requestLoginToPage.AllowAutoRedirect = false;

你为啥把重定向给禁用了?
孟子E章 2011-07-29
  • 打赏
  • 举报
回复
确实奇怪,我也试试
wujianfeng32 2011-07-29
  • 打赏
  • 举报
回复
学习、、、、
xmyjd 2011-07-29
  • 打赏
  • 举报
回复
requestLoginToPage.AllowAutoRedirect = true;
加一些这个,允许重定向
sunny906 2011-07-29
  • 打赏
  • 举报
回复
http://www.99inf.com/e/enews/index.php,页面不存在
silence1214 2011-07-29
  • 打赏
  • 举报
回复
我找工具了 ,也的确利用了这个工具,发现自己的代码的发送的标识和用浏览器抓包的结果一样,但是还是死活返回了404。。
我的是2.0的 这个bug我也了解了,不是这个地方应该。
很奇怪的是我用java的httpclient就没问题了。。到底是肿么回事。好奇怪啊
绿色夹克衫 2011-07-28
  • 打赏
  • 举报
回复
另外印象中Framework3.5的Cookie有个bug,好像不支持/开头的,细节我也忘得差不多了,不过应该能够搜索到资料。
绿色夹克衫 2011-07-28
  • 打赏
  • 举报
回复
按照1楼说的,找个工具查看一下来回的数据吧,光凭程序逻辑有时候会整死人的,尤其是这种又弄Cookie,又设置Headers的,万一有个把前端用脚本干活的,麻烦就更大了。
silence1214 2011-07-28
  • 打赏
  • 举报
回复
get可以的 这个页面也是可以的
按照2楼的 我也测试了 发现的确是404 但是请求参数和浏览器的一模一样啊。。真是奇怪了
我在java下用httpclient到时没问题。。真奇怪了啊
  • 打赏
  • 举报
回复
用GET试一下看看
强其骨 2011-07-28
  • 打赏
  • 举报
回复
http://www.99inf.com/e/enews/index.php 我打开这个链接时提示页面不存在哦。
机器人 2011-07-28
  • 打赏
  • 举报
回复
你用Fiddler抓包检查下,就知道错哪了。

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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