zoukankan      html  css  js  c++  java
  • 使用C#发送Http 请求实现模拟登陆(以博客园为例)

       

        模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也是这样模拟客户端的cookie 然后发送请求去抢票。 本文将演示如何用C# 来实现模拟登陆的,推荐一款工具Fiddler,这是一款监听http 请求的利器。废话不多说,我就以博客园为例来实现模拟登陆。首先我登陆博客园 http://passport.cnblogs.com/login.aspx 输入用户名和密码点登陆 就会看到Fiddler 上的相关信息:


    Ok,我首先需要发送一个http 请求 ,这个请求时POST的方式,然后用户名和密码就是POST的数据。代码如下:

     1 static CookieContainer GetCookie(string postString, string postUrl)
     2 {
     3 
     4 CookieContainer cookie = new CookieContainer();
     5 
     6 HttpWebRequest httpRequset = (HttpWebRequest)HttpWebRequest.Create(postUrl);//创建http 请求
     7 httpRequset.CookieContainer = cookie;//设置cookie
     8 httpRequset.Method = "POST";//POST 提交
     9 httpRequset.KeepAlive = true;
    10 httpRequset.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko";
    11 httpRequset.Accept = "text/html, application/xhtml+xml, */*";
    12 httpRequset.ContentType = "application/x-www-form-urlencoded";//以上信息在监听请求的时候都有的直接复制过来
    13 byte[] bytes = System.Text.Encoding.UTF8.GetBytes(postString);
    14 httpRequset.ContentLength = bytes.Length;
    15 Stream stream = httpRequset.GetRequestStream();
    16 stream.Write(bytes, 0, bytes.Length);
    17 stream.Close();//以上是POST数据的写入
    18 
    19 HttpWebResponse httpResponse = (HttpWebResponse)httpRequset.GetResponse();//获得 服务端响应
    20 return cookie;//拿到cookie
    21 }

    拿到cookie 之后我们就可以以用户的什么去用户的后台或者其他的地方:

     1 static string GetContent(CookieContainer cookie, string url)
     2 {
     3 string content;
     4 HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(url);
     5 httpRequest.CookieContainer = cookie;
     6 httpRequest.Referer = url;
     7 httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko";
     8 httpRequest.Accept = "text/html, application/xhtml+xml, */*";
     9 httpRequest.ContentType = "application/x-www-form-urlencoded";
    10 httpRequest.Method = "GET";
    11 
    12 HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
    13 
    14 using (Stream responsestream = httpResponse.GetResponseStream())
    15 {
    16 
    17 using (StreamReader sr = new StreamReader(responsestream, System.Text.Encoding.UTF8))
    18 {
    19 content = sr.ReadToEnd();
    20 }
    21 }
    22 
    23 return content;
    24 }

    OK 下面是调用 我写的是一个控制台程序:

     1  1 static void Main(string[] args)
     2  2 {
     3  3 string loginstr = "{要post 的登陆数据包括用户名和密码}";
     4  4 
     5  5 //从登陆的地址获取cookie
     6  6 CookieContainer cookie = GetCookie(loginstr, "http://passport.cnblogs.com/login.aspx");
     7  7 
     8  8 //这个是进入后台地址
     9  9 Console.WriteLine(GetContent(cookie, "http://i.cnblogs.com/EditPosts.aspx"));
    10 10 
    11 11 Console.Read();
    12 12 }

    可以看到我已经进入了后台了:

    如果我是没有登陆的情况下进入这个地址是这样的:

    下次我就写一下怎么在模拟登陆之后发送http 请求实现添加删除这些效果。

  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/ListenCode/p/4211776.html
Copyright © 2011-2022 走看看