C# httpRequest http 取得结果与 浏览器不同

lz562065806 2015-11-24 02:43:08
首先使用HttpAnalyzerStdV7 对浏览器登录某网站的 请求以及返回进行了记录。
而后使用c# httpRequest 进行了模拟。
监测结果两个完全一致,但是在最终登录的时候,c# 却无法登录。

cookie一直有保留,在最终登录时候的header 监测中也能看到,连length 都做到了一致。
在我的感觉里面,我模拟的http 与浏览器已经完全一样了。
但是返回的数据不一样。
大家有什么思路。
...全文
370 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_lz 2015-11-25
  • 打赏
  • 举报
回复
引用 5 楼 lz562065806 的回复:
[quote=引用 3 楼 crystal_lz 的回复:] 首先 你能保证 你的每个参数都是正确的吗? 或者说 你那个网站的请求参数 没有其他什么多余的参数之类的 比如 腾讯的 登录 不仅有帐号 密码的 md5 还有一大堆的各种id 之类的参数 甚至有个参数 是你按键次数 错一个都别想登录进去
通过对比抓包,参数格式是完全正确的,当然网站确实有 randtr 之类的 随机字符,但是也全部进行了解析并提交。 但是依然无法正确的返回结果。 不过你的意思是 还是从http 请求的完全一直性上来做吗?[/quote] 那么 还有你前 抓到的包是否够全?比如 依然用腾讯举例 腾讯登陆不止一个包的 在登陆前 会把q先发一个包过去 来决定登陆是否需要用到验证码之类的 如果不需要验证码 则直接返回一个明文的验证码给你 结合第二次发包作为真正登陆的包的其中一个参数 我一般用浏览器 自带F12抓包 一般都是 先打开目标登陆页面 等登陆页面完全加载出来 清空一次抓包 去掉那些多余数据包 然后手动输入帐号密码之类的登陆 这个过程中产生的所有数据包 而不是 在点击登陆的时候再去抓包 有些站你在文本框输入过程中可能也会产生数据包 如果真的像你说的那样 数据完全一直都没有登陆成功 那就只有现场分析才可能知道了 或者 你的http头是否符合他站点要求 或者干脆直接一点 抓一个包的数据出来用你的程序用抓出来的cookie 发送一个一模一样的数据包过去 看看效果 当然前提是 他的每一个登陆会话都是 同样数据才行 不像腾讯那样 先要去获取一个验证码作为第二次提交包 动作无法回放
xdashewan 2015-11-25
  • 打赏
  • 举报
回复
引用 10 楼 lz562065806 的回复:
确实有好多随机串,但是我用正则全部匹配出来了。并且我查看为了页面的js,在输入过程中这些串是么有变化的。 另外啥叫多包登录?
浏览器提交之后 是个302跳转,你提交的拿到的是200吗?登录的地址是https?需不要证书?登录页除了获取图片之类还有没有其他请求?
lz562065806 2015-11-25
  • 打赏
  • 举报
回复
引用 8 楼 xdashewan 的回复:
如果你确认你的HTTP头和body真的完全和你浏览器的一致,那么你可能需要考虑登录可能不只有那个数据包那么简单。举个简单点的例子,你访问他的登录页面时,服务器产生一个动态的校验码之类的数据发给浏览器,并在登录时会附带上这串校验码给服务器验证。你现在的模拟提交的确完美模拟了登录时所有请求数据,但因为校验码是在你访问登录页面时动态产生,使得你提交的校验码并非是合理的,所以校验不通过。这当然只是举个例子,并非一定就是如此。我想说的是如果你确认单步登录数据完全正确,还无法顺利登录,那么你得考虑下多步,或者和楼上说的一样多包登录
首先感谢你的回答。 确实有好多随机串,但是我用正则全部匹配出来了。并且我查看为了页面的js,在输入过程中这些串是么有变化的。 另外啥叫多包登录?
lz562065806 2015-11-25
  • 打赏
  • 举报
回复
引用 7 楼 crystal_lz 的回复:
[quote=引用 5 楼 lz562065806 的回复:] [quote=引用 3 楼 crystal_lz 的回复:] 首先 你能保证 你的每个参数都是正确的吗? 或者说 你那个网站的请求参数 没有其他什么多余的参数之类的 比如 腾讯的 登录 不仅有帐号 密码的 md5 还有一大堆的各种id 之类的参数 甚至有个参数 是你按键次数 错一个都别想登录进去
通过对比抓包,参数格式是完全正确的,当然网站确实有 randtr 之类的 随机字符,但是也全部进行了解析并提交。 但是依然无法正确的返回结果。 不过你的意思是 还是从http 请求的完全一直性上来做吗?[/quote] 那么 还有你前 抓到的包是否够全?比如 依然用腾讯举例 腾讯登陆不止一个包的 在登陆前 会把q先发一个包过去 来决定登陆是否需要用到验证码之类的 如果不需要验证码 则直接返回一个明文的验证码给你 结合第二次发包作为真正登陆的包的其中一个参数 我一般用浏览器 自带F12抓包 一般都是 先打开目标登陆页面 等登陆页面完全加载出来 清空一次抓包 去掉那些多余数据包 然后手动输入帐号密码之类的登陆 这个过程中产生的所有数据包 而不是 在点击登陆的时候再去抓包 有些站你在文本框输入过程中可能也会产生数据包 如果真的像你说的那样 数据完全一直都没有登陆成功 那就只有现场分析才可能知道了 或者 你的http头是否符合他站点要求 或者干脆直接一点 抓一个包的数据出来用你的程序用抓出来的cookie 发送一个一模一样的数据包过去 看看效果 当然前提是 他的每一个登陆会话都是 同样数据才行 不像腾讯那样 先要去获取一个验证码作为第二次提交包 动作无法回放[/quote] 首先感谢你的回答。 我的抓包过程刚开始也使用浏览器,也是像你这样进行抓包的(或者说后来变成这个样子,因为慢慢要把所有的参数摸全),后来利用浏览器已经完全一致 依然不行,就换HttpAnalyzerStdV7(简称analyzer),用analyzer 监控火狐浏览器,记录所有的请求以及返回。而后用自己的c#程序进行模拟。 分三步1.获取页面,得到 隐藏域的 数值以及 一个动态的action地址。2,获取验证码,构建一个图片的http请求,而后输出到我的form中。3.输入账号密码验证码 ,进行提交(当然也提交了前面所获得隐藏域name和value,以及提交的action也是页面动态提取过来的)。不同的就发生在第三步,如前文所说,浏览器提交之后 是个302跳转,但是我的提交之后是一个正常的返回页面。返回页就是登录页。 另外尝试使用抓包后的cookie值(网页登录后的),直接在程序中addCookie,然后带着这个cookie,做了一个get请求,返回的页面依旧是没有登录的页面
xdashewan 2015-11-25
  • 打赏
  • 举报
回复
如果你确认你的HTTP头和body真的完全和你浏览器的一致,那么你可能需要考虑登录可能不只有那个数据包那么简单。举个简单点的例子,你访问他的登录页面时,服务器产生一个动态的校验码之类的数据发给浏览器,并在登录时会附带上这串校验码给服务器验证。你现在的模拟提交的确完美模拟了登录时所有请求数据,但因为校验码是在你访问登录页面时动态产生,使得你提交的校验码并非是合理的,所以校验不通过。这当然只是举个例子,并非一定就是如此。我想说的是如果你确认单步登录数据完全正确,还无法顺利登录,那么你得考虑下多步,或者和楼上说的一样多包登录
lz562065806 2015-11-25
  • 打赏
  • 举报
回复
引用 11 楼 xdashewan 的回复:
[quote=引用 10 楼 lz562065806 的回复:] 确实有好多随机串,但是我用正则全部匹配出来了。并且我查看为了页面的js,在输入过程中这些串是么有变化的。 另外啥叫多包登录?
浏览器提交之后 是个302跳转,你提交的拿到的是200吗?登录的地址是https?需不要证书?登录页除了获取图片之类还有没有其他请求?[/quote] 登录地址不是 https,我提交之后拿到的是 200
lz562065806 2015-11-24
  • 打赏
  • 举报
回复
引用 3 楼 crystal_lz 的回复:
首先 你能保证 你的每个参数都是正确的吗? 或者说 你那个网站的请求参数 没有其他什么多余的参数之类的 比如 腾讯的 登录 不仅有帐号 密码的 md5 还有一大堆的各种id 之类的参数 甚至有个参数 是你按键次数 错一个都别想登录进去
通过对比抓包,参数格式是完全正确的,当然网站确实有 randtr 之类的 随机字符,但是也全部进行了解析并提交。 但是依然无法正确的返回结果。 不过你的意思是 还是从http 请求的完全一直性上来做吗?
lz562065806 2015-11-24
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
无法登录的返回值是什么
返回回的content ,还是登录页面。 正确的登录是个302 跳转。跳转的连接中含有tikect(令牌的意思,拼写可能不对)
lz562065806 2015-11-24
  • 打赏
  • 举报
回复
引用 2 楼 knf 的回复:
HttpAnalyzerStdV7 会自动解压返回的http包 而你的程序不会自动解压 请确定你的http收到的是否是压缩返回包,如果是,则需要解压。
程序内已经做了解压了
crystal_lz 2015-11-24
  • 打赏
  • 举报
回复
首先 你能保证 你的每个参数都是正确的吗? 或者说 你那个网站的请求参数 没有其他什么多余的参数之类的 比如 腾讯的 登录 不仅有帐号 密码的 md5 还有一大堆的各种id 之类的参数 甚至有个参数 是你按键次数 错一个都别想登录进去
xdashewan 2015-11-24
  • 打赏
  • 举报
回复
无法登录的返回值是什么
knf 2015-11-24
  • 打赏
  • 举报
回复
HttpAnalyzerStdV7 会自动解压返回的http包 而你的程序不会自动解压 请确定你的http收到的是否是压缩返回包,如果是,则需要解压。

110,499

社区成员

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

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

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