c# httpwebrequest 模拟登陆

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# httpwebrequest 模拟登陆相关的知识,希望对你有一定的参考价值。

登录的时候有验证码,如果拿到这个验证码文件(php文件)现在可以用程序单独识别这个验证码了,但是在post提交登录的时候 提交用户名和密码的时候怎么将这个验证码提交上去呢,验证码是刷新一次就会变的,
要实现的功能:
1、用户名加密码加验证码实现登录,并得到cookie。cookie登录是需要刷新一次的吧,不然登录不成功。 (验证码识别这块已经解决,重点是如何结合httpwebrequest来提交这个验证码)
2、然后用cookie去访问某个页面返回其源码

既然您能已经能识别验证码了,而且是用C#(应该是Webbrowser吧) 那么所有的参数都应该没有问题了吧。只需要知道 传递给谁/具体参数传递的写法
您如果是做开发最好是下个firefox 或者Google的浏览器
firefox里面自带了个“开发人员工具"或者下个firebug更好,它可以更全面的为您记录/浏览,html元素/脚本/css/http请求等
在http请求中您很方便的看到目标网页是如何将这些参数组织并传递给后台页面的。
至于Cookie,这个基本会在后台服务器端生成,如果在客户端生成的话基本上这个网站也就是个幼儿园级别的了,所以我们无法调用某接口为自己创建Cookie
但是,如果我们分析清楚,目标网站是如何利用参数登录的,包括都调用了什么js脚本/在哪个框架中提出http请求的,那么咱们完全模拟的话,就可以让它的服务器端程序为咱们创建合法的Cookie

再就是现在很多网站利用类似检查盗链的方式检查该http请求是否是从我理想的位置提出的,如果不是就拒绝提供服务。
如果真的比较棘手的话我们还可以分析生成Cookie,通过Cookie欺骗,完成利用Cookie进行访问的过程。
参考技术A 先获取验证码保存cookie然后模拟登录的时候带上已经保存的cookie就可以了追问

那要用到get方法哈

追答

用的 Get方法 获取验证码然后保存cookie 提交的时候发送cookie就行了

追问

能给个例子吗 最好用dedecms的登录和文章发布

追答

public class Login


CookieContainer cookies = new CookieContainer();
HttpWebRequest wrq;
byte[] onedata = ;
//
/// 获取Cookie
///
public void LoadCookie()

try

string src = "网页地址";
wrq = (HttpWebRequest)WebRequest.Create(src);
wrq.CookieContainer = cookies;
wrq.Method = "POST";
wrq.Timeout = 10000;
wrq.ContentType = "application/x-www-form-urlencoded";
wrq.ContentLength = onedata.Length;
Stream myseream = wrq.GetRequestStream();
myseream.Write(onedata, 0, onedata.Length);

catch


///
/// 获取验证码方法
///
public void LoadImg()

string img = "验证码地址";
try

wrq = (HttpWebRequest)WebRequest.Create(img);//请求的URL
wrq.CookieContainer = cookies;//*发送COOKIE
wrq.Method = "GET";
wrq.ContentType = "application/x-www-form-urlencoded";
wrq.Timeout = 10000;
//获取返回资源
HttpWebResponse response = (HttpWebResponse)wrq.GetResponse();
//获取流
Image bitmapImage = Bitmap.FromStream(response.GetResponseStream()) as Bitmap;
im = bitmapImage;
this.pbimg.Image = bitmapImage;

catch


贴不上去了 post提交的时候 带上wrq.CookieContainer = cookies;//*发送COOKIE


追问

麻烦把这个源码发一份给我吧 243652695的qq邮箱

本回答被提问者采纳
参考技术B 已发送,请检查追问

发送到哪里啦

c# HttpWebRequest 模拟HTTP post 传递JSON参数

 //HTTP post   JSON 参数
        private string HttpPost(string Url, Object ticket)
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(ticket.GetType());
            MemoryStream stream = new MemoryStream();
            serializer.WriteObject(stream, ticket);
            byte[] dataBytes = new byte[stream.Length];
            stream.Position = 0;
            stream.Read(dataBytes, 0, (int)stream.Length);
            string param = Encoding.UTF8.GetString(dataBytes);
                byte[] bs = Encoding.ASCII.GetBytes(param);
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.ContentLength = bs.Length;
                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                }
                HttpWebResponse hwr = req.GetResponse() as HttpWebResponse;
                System.IO.StreamReader myreader = new System.IO.StreamReader(hwr.GetResponseStream(), Encoding.UTF8);
                string responseText = myreader.ReadToEnd();
            return responseText;
        }

 

 

导入对应的dll  ,  Object参数可以随意,实体类传什么,json参数就是什么。
























以上是关于c# httpwebrequest 模拟登陆的主要内容,如果未能解决你的问题,请参考以下文章

HttpWebRequest模拟登陆页面,已登陆成功,但是用WebClient抓取主页面时,总是提示操作超时

C#,HttpWebRequest模拟发送Post请求

如何使用 c# 使用 httpwebrequest 从 json api 获取数据?

c# HttpWebRequest 模拟HTTP post 传递JSON参数

HttpClient 模拟登陆知乎

转asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端