博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpWebrequest来模拟登陆的全过程
阅读量:4077 次
发布时间:2019-05-25

本文共 6899 字,大约阅读时间需要 22 分钟。

根据我上面的几个小积累,其实平时饿get和post已经没问题了,有个特殊的post就是登陆。大家知道登陆问题在server端是session的问题,在客户端来post的时候其实还是cookie的问题,如何把cookie发送到server,并且server认为你是登陆成功了呢。这里给个例子,其实就是CookieContainer的使用,这个使用只需要附带进去就好了。也就是第一次请求的时候附带个空的给request,再次request的时候还是把这个给设置到request中去即可,第一次request带个空的去后,服务器端就把cookie的信息写到了这个container中了,你再次带这个container去request的话,服务器如果还是会从这个container里面找cookie或者再次放入点cookie的。整个代码如下,先发c#的模拟。再次发server端的验证代码:

 

 

using System;using System.Collections.Generic;using System.Text;using System.Net;using System.IO;using System.Collections.Specialized; namespace post_test{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Begin...");            Console.WriteLine("打开登陆页面...");            // 设置cookie的container            CookieContainer cookieContainer = new CookieContainer();            // 设置一些公用的请求头            NameValueCollection collection = new NameValueCollection();            collection.Add("accept-language", "zh-cn,zh;q=0.5");            collection.Add("accept-encoding", "gzip,deflate");            collection.Add("accept-charset", "GB2312,utf-8;q=0.7,*;q=0.7");            collection.Add("cache-control", "max-age=0");            collection.Add("keep-alive", "115");            // 先请求登陆页面            HttpWebRequest requestLoginPage = (HttpWebRequest)WebRequest.Create("http://localhost:8080/test2/index.jsp");            requestLoginPage.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";            requestLoginPage.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";            requestLoginPage.Headers.Add(collection);            HttpWebResponse responseLoginPage = (HttpWebResponse)requestLoginPage.GetResponse();            Console.WriteLine("打开登陆页面状态:{0}", responseLoginPage.StatusCode);            // 来Post数据到登陆页面            HttpWebRequest requestLoginToPage = (HttpWebRequest)WebRequest.Create("http://localhost:8080/test2/servlet/LoginServlet");            requestLoginToPage.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";            requestLoginToPage.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";            requestLoginToPage.ContentType = "application/x-www-form-urlencoded";            requestLoginToPage.Method = "POST";            requestLoginToPage.Headers.Add(collection);            requestLoginToPage.CookieContainer = cookieContainer;            String data = "userName=admin&password=123456";            byte[] bytes = Encoding.ASCII.GetBytes(data);            requestLoginToPage.ContentLength = bytes.Length;            Stream streamLoginToPage = requestLoginToPage.GetRequestStream();            streamLoginToPage.Write(bytes, 0, bytes.Length);            streamLoginToPage.Flush();            streamLoginToPage.Close();            HttpWebResponse responseLoginToPage = (HttpWebResponse)requestLoginToPage.GetResponse();            Console.WriteLine("Post数据结果状态:{0}", responseLoginToPage.StatusCode);            // 打开登陆状态页面            HttpWebRequest requestResultPage = (HttpWebRequest)WebRequest.Create("http://localhost:8080/test2/result.jsp");            requestResultPage.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";            requestResultPage.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";            requestResultPage.Headers.Add(collection);            requestResultPage.CookieContainer = cookieContainer;            HttpWebResponse responseResultPage = (HttpWebResponse)requestResultPage.GetResponse();            Console.WriteLine("打开状态页面状态:{0},内容:{1}", responseLoginPage.StatusCode, new StreamReader(responseResultPage.GetResponseStream(), Encoding.UTF8).ReadToEnd());            Console.Read();        }    }}

服务器端也就是3个文件,一个是登陆页面,一个是登陆处理的servlet一个是验证登陆是否成功的jsp。分别如下:

1:登陆页面

<%@ page language="java"  pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'index.jsp' starting page	
用户名
密码

2:处理登陆的servlet

package com.baseframework.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {	/**	 * The doGet method of the servlet. 
* * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet.
* * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String userName = request.getParameter("userName"); String password = request.getParameter("password"); if(userName != null && password != null && userName.equals("admin") && password.equals("123456")) { request.getSession().setAttribute("login", "true"); // 添加一个session来验证cookie的效果 request.getSession().setAttribute("count", "123456"); out.println("登陆成功!"); System.out.println("登陆成功!"); } else { request.getSession().setAttribute("login", "false"); out.println("登陆失败!"); System.out.println("登陆失败!"); } out.flush(); out.close(); }}

3:判断登陆结果的页面

<%@ page language="java" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'result.jsp' starting page    	
<% if(session.getAttribute("login") != null && session.getAttribute("login").equals("true")) { out.println("登陆成功!"); // 打印测试session out.println("[测试Session的count:" + session.getAttribute("count") + "]"); } else { out.println("失败!"); } %>

 

再次上个运行截图吧:

 

转载地址:http://otini.baihongyu.com/

你可能感兴趣的文章
STM32的启动文件
查看>>
我喜欢的一些机架
查看>>
四合一电调
查看>>
YOLOv3目标检测这个我见到好几次了
查看>>
富斯遥控器的遥控距离大概三四百米
查看>>
我发现现在都有很多很好的焊接工具
查看>>
pixhawk无GPS时可以在定高或者自稳模式下解锁起飞(见过多次别人说到)
查看>>
pixhawk(PX4)的一些论坛网站(包括中文版的PX4用户手册和PX4开发手册)
查看>>
串级 PID 为什么外环输出是内环的期望?(和我之前对串级PID的总结一样)
查看>>
APM/Pixhawk飞行日志分析入门(苍穹四轴)
查看>>
我刚刚才完全清楚GPS模块的那根杆子是怎么固定安装好的
查看>>
去github里面找找也没有别人无人机+SLAM的工程
查看>>
PX4与ROS关系以及仿真控制(键盘控制无人机)
查看>>
我对无人机重心高度的理解
查看>>
现在明白为什么无名博客里好几篇文章在讲传感器的滞后
查看>>
PCB我感觉也可以找个几天的视频教程看看,我感觉看视频教程还是很有感觉的。
查看>>
我院子里GPS还是有卫星信号的,只是只有11 12颗左右
查看>>
无人机不装脚架的好处就是降落时会比较稳,不怕倾斜侧翻。
查看>>
实际我看Pixhawk定高模式其实也是飞得很稳,飘得也不厉害
查看>>
我现在发现开课吧的智能无人机课程里面也讲GAAS
查看>>