模拟艺龙旅游网登录

想模拟登录,首先整理一下流程

1.通过360浏览器(IE,火狐等等)F12开发人员工具抓到相关数据

2.获取验证码(拿到cookie),登录时也需要使用

3.登录

-------------------------------

F12调出开发人员工具,输入用户名,密码登录,看我们抓到了什么信息。

Request URL:这个就是登录请求的url  
https://secure.elong.com/passport/ajax/elongLogin
方式POST

Form Data:这个是我们要POST传输的数据:

userName=xzdylyh&passwd=12313&validateCode=验证码&rememberMe=false

其它一些重要信息在Request Headers中

*****************************************************************

我使用C# 设计的winform界面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Net;
using System.IO;
using System.Data;
namespace HTTPHELPER
{
public class ELOGN_LOGIN
{ public static CookieContainer container = null; //存储验证码cookie #region 登录
public string requestM(string uName,string passwd,string vaildate)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
try
{
request = (HttpWebRequest)HttpWebRequest.Create("https://secure.elong.com/passport/ajax/elongLogin");
request.Method = "Post";
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
request.AllowAutoRedirect = true;
request.CookieContainer = container;//获取验证码时候获取到的cookie会附加在这个容器里面
request.KeepAlive = true;//建立持久性连接
//整数据
string postData = string.Format("userName={0}&passwd={1}&validateCode={2}&rememberMe=true", uName, passwd, vaildate);
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] bytepostData = encoding.GetBytes(postData);
request.ContentLength = bytepostData.Length; //发送数据 using结束代码段释放
using (Stream requestStm = request.GetRequestStream())
{
requestStm.Write(bytepostData, , bytepostData.Length);
} //响应
response = (HttpWebResponse)request.GetResponse();
string text = string.Empty;
using (Stream responseStm = response.GetResponseStream())
{
StreamReader redStm = new StreamReader(responseStm, Encoding.UTF8);
text = redStm.ReadToEnd();
} return text;
}
catch (Exception ex)
{
var msg = ex.Message;
return msg;
} }
#endregion #region 获取验证码
public Stream getCodeStream(string codeUrl)
{ //验证码请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(codeUrl);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1";
request.Accept = "image/webp,*/*;q=0.8";
request.CookieContainer = new CookieContainer();//!Very Important.!!!
container = request.CookieContainer;
var c = request.CookieContainer.GetCookies(request.RequestUri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = container.GetCookies(request.RequestUri); Stream stream = response.GetResponseStream();
return stream;
}
}
#endregion
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using HTTPHELPER;
namespace WindowsFormsApplication8
{
public partial class ELONG_LOGIN_FORM : Form
{
public ELONG_LOGIN_FORM()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{ ELOGN_LOGIN elongLogin = new ELOGN_LOGIN(); var rmsg = elongLogin.requestM(txtuserName.Text,txtPassword.Text,txtVaildata.Text);
MessageBox.Show(rmsg);
} private void ELONG_LOGIN_FORM_Load(object sender, EventArgs e)
{
ReflshPicImage();//更新验证码
} //更新验证码
public void ReflshPicImage()
{
string codeUrl = "https://secure.elong.com/passport/getValidateCode";
ELOGN_LOGIN agent = new ELOGN_LOGIN();
Stream stmImage = agent.getCodeStream(codeUrl);
picValidate.Image = Image.FromStream(stmImage);
} private void btnReValidate_Click(object sender, EventArgs e)
{
ReflshPicImage();//更新验证码
} private void picValidate_Click(object sender, EventArgs e)
{
ReflshPicImage();//更新验证码
}
}
}

最后执行效果,登录的session已经成功返回。

C#使用HttpWebRequest与HttpWebResponse模拟用户登录的更多相关文章

  1. C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

    原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...

  2. 运用String类实现一个模拟用户登录程序

    package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...

  3. java.net.URL 模拟用户登录网页并维持session

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

  4. python 初学习 模拟用户登录

    #!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...

  5. python3.0 模拟用户登录,三次错误锁定

    # -*- coding:utf-8 -*- #需求模拟用户登录,超过三次错误锁定不允许登陆     count = 0   #realname passwd Real_Username = &quo ...

  6. xpath技术解析xml以及案例模拟用户登录效果

    问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...

  7. jdbc封装模拟用户登录

    dao层 接口 package com.qu.dao; public interface ILoginDAO { /** * 模拟用户登录 * 验证用户名 密码是否正确 * select * from ...

  8. scrapy模拟用户登录

    scrapy框架编写模拟用户登录的三种方式: 方式一:携带cookie登录,携带cookie一般请求的url为登录后的页面,获取cookie信息应在登录后的页面获取,cookie参数应转成字典形式 # ...

  9. java.net.URL 模拟用户登录网页并维持session【转】

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

随机推荐

  1. ASP.NET 前端Ajax获取数据并刷新

    控制器中↓ /// <summary> /// 根据ID来进行展示数据 /// </summary> /// <param name="instru_id&qu ...

  2. .NET Core开发日志——Entity Framework与PostgreSQL

    Entity Framework在.NET Core中被命名为Entity Framework Core.虽然一般会用于对SQL Server数据库进行数据操作,但其实它还支持其它数据库,这里就以Po ...

  3. 新浪广告交易平台(SAX)DSP手册

    新浪广告交易平台(SAX)DSP手册 http://amp.ad.sina.com.cn/sax/doc/zh-CN/xhtml/index.xhtml 新浪广告交易平台(SAX)DSP手册 版权 © ...

  4. Django 的操作

    安装: pip install Django 创建django工程 django-admin startproject  mysite python manage.py startapp blog / ...

  5. take a cpu core offline

    [root@vrouter1 ~]# cat /sys/devices/system/cpu/online -,,- [root@vrouter1 ~]# cat /sys/devices/syste ...

  6. 转:Eclipse 各种小图标的含义

    原文地址:https://www.cnblogs.com/widget90/p/7592507.html Eclipse 各种小图标的含义,记录一下. Eclipse的Package Explorer ...

  7. LeetCode 561 Array Partition I 解题报告

    题目要求 Given an array of 2n integers, your task is to group these integers into n pairs of integer, sa ...

  8. linux配置IP访问权限

    允许访问vi /etc/hosts.allow添加(可以添加多行,其中“:allow”可以省率)sshd:192.168.81.*:allow                     #表示192.1 ...

  9. 帝国cms调用相关文章若没有则调取最新文章

    前面我们说了帝国cms调用最新文章 利用文字调用标签phomenews,现在我们说下相关文章的调用,如果文章有设置关键词的话可以直接用[!--other.link--]进行调取,现在我们来升级一下,如 ...

  10. what' the python之递归函数、二分算法与汉诺塔游戏

    what's the 递归? 递归函数的定义:在函数里可以再调用函数,如果这个调用的函数是函数本身,那么就形成了一个递归函数. 递归的最大深度为997,这个是程序强制定义的,997完全可以满足一般情况 ...