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

问题描述

首先使用HttpAnalyzerStdV7对浏览器登录某网站的请求以及返回进行了记录。而后使用c#httpRequest进行了模拟。监测结果两个完全一致,但是在最终登录的时候,c#却无法登录。cookie一直有保留,在最终登录时候的header监测中也能看到,连length都做到了一致。在我的感觉里面,我模拟的http与浏览器已经完全一样了。但是返回的数据不一样。大家有什么思路。

解决方案

解决方案二:
无法登录的返回值是什么
解决方案三:
HttpAnalyzerStdV7会自动解压返回的http包而你的程序不会自动解压请确定你的http收到的是否是压缩返回包,如果是,则需要解压。
解决方案四:
首先你能保证你的每个参数都是正确的吗?或者说你那个网站的请求参数没有其他什么多余的参数之类的比如腾讯的登录不仅有帐号密码的md5还有一大堆的各种id之类的参数甚至有个参数是你按键次数错一个都别想登录进去
解决方案五:
引用2楼knf的回复:

HttpAnalyzerStdV7会自动解压返回的http包而你的程序不会自动解压请确定你的http收到的是否是压缩返回包,如果是,则需要解压。

程序内已经做了解压了
解决方案六:
引用3楼crystal_lz的回复:

首先你能保证你的每个参数都是正确的吗?或者说你那个网站的请求参数没有其他什么多余的参数之类的比如腾讯的登录不仅有帐号密码的md5还有一大堆的各种id之类的参数甚至有个参数是你按键次数错一个都别想登录进去

通过对比抓包,参数格式是完全正确的,当然网站确实有randtr之类的随机字符,但是也全部进行了解析并提交。但是依然无法正确的返回结果。不过你的意思是还是从http请求的完全一直性上来做吗?
解决方案七:
引用1楼xdashewan的回复:

无法登录的返回值是什么

返回回的content,还是登录页面。正确的登录是个302跳转。跳转的连接中含有tikect(令牌的意思,拼写可能不对)
解决方案八:
引用5楼lz562065806的回复:

Quote: 引用3楼crystal_lz的回复:
首先你能保证你的每个参数都是正确的吗?或者说你那个网站的请求参数没有其他什么多余的参数之类的比如腾讯的登录不仅有帐号密码的md5还有一大堆的各种id之类的参数甚至有个参数是你按键次数错一个都别想登录进去

通过对比抓包,参数格式是完全正确的,当然网站确实有randtr之类的随机字符,但是也全部进行了解析并提交。但是依然无法正确的返回结果。不过你的意思是还是从http请求的完全一直性上来做吗?

那么还有你前抓到的包是否够全?比如依然用腾讯举例腾讯登陆不止一个包的在登陆前会把q先发一个包过去来决定登陆是否需要用到验证码之类的如果不需要验证码则直接返回一个明文的验证码给你结合第二次发包作为真正登陆的包的其中一个参数我一般用浏览器自带F12抓包一般都是先打开目标登陆页面等登陆页面完全加载出来清空一次抓包去掉那些多余数据包然后手动输入帐号密码之类的登陆这个过程中产生的所有数据包而不是在点击登陆的时候再去抓包有些站你在文本框输入过程中可能也会产生数据包如果真的像你说的那样数据完全一直都没有登陆成功那就只有现场分析才可能知道了或者你的http头是否符合他站点要求或者干脆直接一点抓一个包的数据出来用你的程序用抓出来的cookie发送一个一模一样的数据包过去看看效果当然前提是他的每一个登陆会话都是同样数据才行不像腾讯那样先要去获取一个验证码作为第二次提交包动作无法回放
解决方案九:
如果你确认你的HTTP头和body真的完全和你浏览器的一致,那么你可能需要考虑登录可能不只有那个数据包那么简单。举个简单点的例子,你访问他的登录页面时,服务器产生一个动态的校验码之类的数据发给浏览器,并在登录时会附带上这串校验码给服务器验证。你现在的模拟提交的确完美模拟了登录时所有请求数据,但因为校验码是在你访问登录页面时动态产生,使得你提交的校验码并非是合理的,所以校验不通过。这当然只是举个例子,并非一定就是如此。我想说的是如果你确认单步登录数据完全正确,还无法顺利登录,那么你得考虑下多步,或者和楼上说的一样多包登录
解决方案十:
引用7楼crystal_lz的回复:

Quote: 引用5楼lz562065806的回复:
Quote: 引用3楼crystal_lz的回复:
首先你能保证你的每个参数都是正确的吗?或者说你那个网站的请求参数没有其他什么多余的参数之类的比如腾讯的登录不仅有帐号密码的md5还有一大堆的各种id之类的参数甚至有个参数是你按键次数错一个都别想登录进去

通过对比抓包,参数格式是完全正确的,当然网站确实有randtr之类的随机字符,但是也全部进行了解析并提交。但是依然无法正确的返回结果。不过你的意思是还是从http请求的完全一直性上来做吗?

那么还有你前抓到的包是否够全?比如依然用腾讯举例腾讯登陆不止一个包的在登陆前会把q先发一个包过去来决定登陆是否需要用到验证码之类的如果不需要验证码则直接返回一个明文的验证码给你结合第二次发包作为真正登陆的包的其中一个参数我一般用浏览器自带F12抓包一般都是先打开目标登陆页面等登陆页面完全加载出来清空一次抓包去掉那些多余数据包然后手动输入帐号密码之类的登陆这个过程中产生的所有数据包而不是在点击登陆的时候再去抓包有些站你在文本框输入过程中可能也会产生数据包如果真的像你说的那样数据完全一直都没有登陆成功那就只有现场分析才可能知道了或者你的http头是否符合他站点要求或者干脆直接一点抓一个包的数据出来用你的程序用抓出来的cookie发送一个一模一样的数据包过去看看效果当然前提是他的每一个登陆会话都是同样数据才行不像腾讯那样先要去获取一个验证码作为第二次提交包动作无法回放

首先感谢你的回答。我的抓包过程刚开始也使用浏览器,也是像你这样进行抓包的(或者说后来变成这个样子,因为慢慢要把所有的参数摸全),后来利用浏览器已经完全一致依然不行,就换HttpAnalyzerStdV7(简称analyzer),用analyzer监控火狐浏览器,记录所有的请求以及返回。而后用自己的c#程序进行模拟。分三步1.获取页面,得到隐藏域的数值以及一个动态的action地址。2,获取验证码,构建一个图片的http请求,而后输出到我的form中。3.输入账号密码验证码,进行提交(当然也提交了前面所获得隐藏域name和value,以及提交的action也是页面动态提取过来的)。不同的就发生在第三步,如前文所说,浏览器提交之后是个302跳转,但是我的提交之后是一个正常的返回页面。返回页就是登录页。另外尝试使用抓包后的cookie值(网页登录后的),直接在程序中addCookie,然后带着这个cookie,做了一个get请求,返回的页面依旧是没有登录的页面
解决方案十一:
引用8楼xdashewan的回复:

如果你确认你的HTTP头和body真的完全和你浏览器的一致,那么你可能需要考虑登录可能不只有那个数据包那么简单。举个简单点的例子,你访问他的登录页面时,服务器产生一个动态的校验码之类的数据发给浏览器,并在登录时会附带上这串校验码给服务器验证。你现在的模拟提交的确完美模拟了登录时所有请求数据,但因为校验码是在你访问登录页面时动态产生,使得你提交的校验码并非是合理的,所以校验不通过。这当然只是举个例子,并非一定就是如此。我想说的是如果你确认单步登录数据完全正确,还无法顺利登录,那么你得考虑下多步,或者和楼上说的一样多包登录

首先感谢你的回答。确实有好多随机串,但是我用正则全部匹配出来了。并且我查看为了页面的js,在输入过程中这些串是么有变化的。另外啥叫多包登录?
解决方案十二:
引用10楼lz562065806的回复:

确实有好多随机串,但是我用正则全部匹配出来了。并且我查看为了页面的js,在输入过程中这些串是么有变化的。另外啥叫多包登录?

浏览器提交之后是个302跳转,你提交的拿到的是200吗?登录的地址是https?需不要证书?登录页除了获取图片之类还有没有其他请求?
解决方案十三:
引用11楼xdashewan的回复:

Quote: 引用10楼lz562065806的回复:
确实有好多随机串,但是我用正则全部匹配出来了。并且我查看为了页面的js,在输入过程中这些串是么有变化的。另外啥叫多包登录?

浏览器提交之后是个302跳转,你提交的拿到的是200吗?登录的地址是https?需不要证书?登录页除了获取图片之类还有没有其他请求?

登录地址不是https,我提交之后拿到的是200

时间: 2024-09-20 00:05:07

C# httpRequest http 取得结果与 浏览器不同的相关文章

AJAX Hacks 之HACK3. 使用独立的文件来取得http request

ajax|request AJAX Hacks 之HACK3. 使用独立的文件来取得http request 本节讲述将初始化request对象的代码从其他代码中抽取出来,作为一个单独的JavaScrip文件来使用. 当一个Ajax应用程序很大的时候,理清每部分的功能是很有必要的.所以把管理XMLHttpRequest对象的代码作为一个独立的js文件保存,如果某个页面使用到它,就将它加载近来,这样做无疑更容易管理.当代码需要修改时,只需修改该文件就是. hack将所有的和request-obje

php实现httpRequest的方法

 这篇文章主要介绍了php实现httpRequest的方法,涉及php操作http的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php实现httpRequest的方法.分享给大家供大家参考.具体如下: 想从学校图书馆的网站上抓取数据处理之后在返回给浏览器,试了不少方法.首先试了http_request(),但是这个学院pecl_http支持,后来又试了网上流传甚广的class HttpRequest,可能是我不会使用,也失败了.后来看到了函数httpRequest($

AJAX Hacks 之HACK1. 检测浏览器的兼容性

ajax|浏览器 AJAX Hacks 之HACK1. 检测浏览器的兼容性 本节介绍如何使用JavaScript 建立起IE或Mozilla浏览器相应的请求对象.客户端使用的浏览器是各种各样的.因此也有不同的请求对象.如在Firefox, Netscape, Safari,Opera中是XMLHttpRequest.IE则是Microsoft.XMLHTTP 或 Msxml2.XMLHTTP. 使用AJAX的第一步是检测客户浏览器的类型,根据相应的类型取得request 对象.下面就是取得该对象

Ajax Hack 之hack 12不刷新浏览器的情况下向服务器提交text或textarea的值

ajax|服务器|浏览器|刷新 Ajax Hack 之hack 12不刷新浏览器的情况下向服务器提交text或textarea的值 本节主要讲的是:将text或textarea的值平滑地传递给服务器. 当用户输入text或textarea的值以后,Ajax能将这些值自动的发给服务器.程序等待text的onblur 事件,然后使用request对象向服务器发送数据.在常用的情况是,用户点击一个按钮,然后将 整个form作为一个大的数据包向服务器发送.服务器相应也与此类似.例如,在线测试或者 教程能

php实现httpRequest的方法_php技巧

本文实例讲述了php实现httpRequest的方法.分享给大家供大家参考.具体如下: 想从学校图书馆的网站上抓取数据处理之后在返回给浏览器,试了不少方法.首先试了http_request(),但是这个学院pecl_http支持,后来又试了网上流传甚广的class HttpRequest,可能是我不会使用,也失败了.后来看到了函数httpRequest($url, $post='', $method='GET', $limit=0, $returnHeader=FALSE, $cookie=''

html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

原文:html5 图片上传,支持图片预览.压缩.及进度显示,兼容IE6+及标准浏览器 以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上传组件添加了单独的图片上传UI,支持图片预览和缩放(通过调整图片的大小以实现图片压缩). 上传组件特点 轻量级,不依赖任何JS库,核心代码(Q.Uploader.js)仅约700行,min版本加起来不到12KB 纯

对象化的Http和请求对象HttpRequest

在面向对象的语言中,有种"万物皆对象"的说法.在上篇文章中介绍了HttpRuntime类,在该类收到请求之后,立即通过HttpWorkerRequest工作者对象对传递的参数进行分析和分解,创建方便网站应用程序处理的对象.与此相关的对象主要有,请求和响应两个对象.即HttpRequest和HttpResponse类型. HttpRequest定义在命名空间System.Web下 // Summary: // Enables ASP.NET to read the HTTP values

锁-我遇到的问题是,一个页面在连接访问一段时间后会禁止访问。但是换个浏览器就可以继续访问。这个怎么破?

问题描述 我遇到的问题是,一个页面在连接访问一段时间后会禁止访问.但是换个浏览器就可以继续访问.这个怎么破? 我遇到的问题是,一个页面在连接访问一段时间后会禁止访问.但是换个浏览器就可以继续访问.这个通过cookie进行封锁的网页怎么抓取,前提是没有登录.他是一个cookie有一定的访问次数限制,到达次数后就会被疯掉,然后换一个浏览器就可以继续访问 解决方案 你爬虫还用浏览器?用服务器端httprequest对象,httprequest不附带cookie,每次会启用新会话 解决方案二: 我用的h

浏览器类型

有时,我们需要获取客户端的类型,也就是通常所说的User-Agent,简称UA,我们在浏览网页时所使用的浏览器就是UA的一种,在Http协议中,通过User-Agent请求头来索命用户浏览器类型,操作系统,浏览器内核等信息的标识.通过这个标识可以根据不同的浏览器显示不同的版本,从而为用户提供更好的体验或者进行信息统计. 对于windows10 中的浏览器Edge的user-agent为: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)