http模拟登陆及发请求

首先声明下,如果服务端写入的cookie属性是HttpOnly的,程序是不能自动获取cookie的,需要人工登陆网站获取cookie再把cookie写死,如下图所示:

http测试工具:http://www.atool.org/httptest.php

package com.eshore.ismp.hbinterface.vsop.client.productCancelBatcher;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import com.alibaba.fastjson.JSONObject;

public class HttpLoginUtils {
	private final static String UTF8="UTF8";
	private final static String MD5="MD5";
	private final static char HEX_DIGITS[] = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘,‘e‘, ‘f‘ };
	private String cookie="JSESSIONID=E1487B3796D918D418DD8D184278C37E; LBN=node20; login_userId=24%2Cadmin_0%2C%E7%AE%A1%E7%90%86%E5%91%98; login_userType=1";
	private static final String userName="admin_0";
	private static final String password="[email protected]#$";
	public static final String type="1";
	public static final String inputCode="JUGG";
	public static final String oldCode="JUGG";
	public static final String LOGIN_DCN_URL="http://127.0.0.1:30082/adminweb/user_login.do?";
	public static final String LOGIN_URL="http://127.0.0.1:9000/adminweb/user_login.do?";
	private static final String CANCEL_URL="http://127.0.0.1:9001/adminweb/hbmonth/productCancel.do?";

	public void request(String tel,long time,String contentId) throws MalformedURLException,IOException{
		/*try{
			cookie=this.login();
		}catch(Exception e){
			e.printStackTrace();
		}*/
		//发送请求
		JSONObject productList = new JSONObject();
		productList.put("contentId",contentId+"@"+contentId);
		productList.put("startTime", time);
		productList.put("tel", tel);
		String param = "productList=["+productList+"]&source=12"
			      +"&operatorAccount=admin_0"+"&operatorName=管理员";
		URL url = new URL(CANCEL_URL);
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		httpConn.setDoOutput(true);
		httpConn.setRequestMethod("POST");
		httpConn.setUseCaches(false);
		System.out.println("cookies:"+cookie);
		httpConn.setRequestProperty("Cookie",cookie);
		OutputStream output = httpConn.getOutputStream();
		output.write(param.getBytes());
		OutputStreamWriter outr = new OutputStreamWriter(output,"UTF-8");
		outr.flush();
		outr.close();
		BufferedReader redoReader = new BufferedReader(new InputStreamReader(httpConn
				.getInputStream(),"UTF-8"));
		StringBuffer redoBuf = new StringBuffer();
		String line = null;
		while ((line = redoReader.readLine()) != null) {
			redoBuf.append(line);
		}
		System.out.println("result info:"+redoBuf.toString());
	}
	/**
	 * @return
	 * 获取cookie
	 * @throws MalformedURLException,IOException
	 */
	public String login() throws MalformedURLException,IOException{
		String cookie="";
		String pswd = this.MD5Encode(password);
		String param = "&username="+userName+"&password="+pswd+"&type="+type+"&inputCode="+inputCode+"&oldCode="+oldCode;
		URL url=new URL(LOGIN_URL);
		HttpURLConnection httpConn=(HttpURLConnection) url.openConnection();
		//设定传送的内容类型是可序列化的java对象 (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
		httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		//设置是否从httpUrlConnection读入,默认情况下是true
		httpConn.setDoOutput(true);
		httpConn.setRequestMethod("POST");
		//Post 请求不能使用缓存
		httpConn.setUseCaches(false);
		httpConn.setInstanceFollowRedirects(false);
		//httpConn.connect();
		// httpConn.getOutputStream();隐形调用了httpConn.connect();
		OutputStream output = httpConn.getOutputStream();
		//写入输出流
		output.write(param.getBytes());
		OutputStreamWriter outr = new OutputStreamWriter(output,"UTF-8");
		outr.flush();
		outr.close();
		//创建读对象
		BufferedReader loginReader = new BufferedReader(new InputStreamReader(httpConn
				.getInputStream(),"UTF-8"));
		StringBuffer sb = new StringBuffer();
		String line = null;
		//一行一行读取
		while ((line = loginReader.readLine()) != null) {
			sb.append(line);
		}
		System.out.println("output :"+sb.toString());
		//获取服务端返回的cookie
		cookie = httpConn.getHeaderField("Set-Cookie");
		return cookie;
	}
	public  String MD5Encode(String originalString) {
		try {
			byte[] originalBytes = originalString.getBytes(UTF8);
			MessageDigest md = MessageDigest.getInstance(MD5);
			md.update(originalBytes);
			byte[] temps = md.digest();
			int j = temps.length;
			char[] str = new char[j * 2];
			int k = 0;
			for (int i = 0; i < j; i++) {
				byte tempByte = temps[i];
				str[k++] = HEX_DIGITS[tempByte >>> 4 & 0xf];
				str[k++] = HEX_DIGITS[tempByte & 0xf];
			}
			return new String(str).toUpperCase();

		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * @param args
	 * test
	 * @throws IOException
	 * @throws MalformedURLException
	 */
	public static void main(String[] args) throws MalformedURLException, IOException {
		String cookie=new HttpLoginUtils().login();
		System.out.println("cookie:"+cookie);
	}

}

  

原文地址:https://www.cnblogs.com/JAYIT/p/9680210.html

时间: 2024-10-10 09:47:09

http模拟登陆及发请求的相关文章

.net 模拟登陆 post https 请求跳转页面

AllowAutoRedirect property is true, the Referer property is set automatically when the request is redirected to another site.">如果 AllowAutoRedirect 属性为 true,则 Referer 属性在请求被重定向到另一个站点时自动设置. Referer HTTP header, set the Referer property to null.&quo

使用C#发送Http 请求实现模拟登陆(以博客园为例)

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

Scrapy基础(十四)————知乎模拟登陆

#-*-coding:utf-8 -*-__author__ = "ruoniao"__date__ = "2017/5/31 20:59" 之前我们通过爬取伯乐在线的文章,伯乐在线对爬取没有什么限制,这次爬取知乎,就有了爬取限制,首先就是登录限制:为破解限制,首先就是模拟登录 模拟登陆首先要明白的就是session和cookie机制: 简单的说(个人理解):  http是一种无状态的协议,为解决用户每次都需要输入密码登录的烦恼,也为了服务器能够记住每次请求的浏览器

模拟登陆CSDN——就是这么简单

工具介绍 本篇文章主要是讲解如何模拟登陆CSDN,使用的工具是HttpClient+Jsoup 其中HttpClient主要是负责发送请求,而Jsoup主要是解析HTML 你可能对HttpClient的API不太了解,不过没关系,往下看就好了~ Jsoup的语法类似jQuery的选择器,相信有一定web基础的人都可以很快的掌握 其中select(String selector)就是最强大的选择器,另外还提供一系列的细化的方法,比如: getElementById(String id), getE

php curl模拟登陆抓取数据

最近由于项目的需要,需要做数据抓取,也就是用的curl相关的函数库,在这之前还真心没有接触过这么高大上的东西,然后从刚开始到今天才研究curl算是第四天了,写这篇博客记录一下这几天的一个过程,在使用curl模拟登陆抓取数据过程中需要注意的一些事项,以及介绍一款支持跨平台(windows.linux.mac)的抓包软件 charles(这个软件是收费的,但是你不花钱也可以使用) ,想要尽快上手,必须要去熟悉两个东西:http协议.curl的相关参数选项的作用 一.介绍curl 这是curl的维基百

asp.net viewstate的模拟登陆

其实 VIEWSTATE 不用太在意,倒是 JTCookieID 需要注意,这个才应该是服务器上用来维护 Session 的那个 Cookie.所以,你用 httpclient 的时候,不能上来就直接发到“POST /PersonLogin.aspx”上,因为那样的话,服务器上还没有建立一个有效的 Session. 你需要先用 HttpClient 发一个别的什么请求(一般是登录窗口那个画面,也可以是其它任何别的页面,反正只是为了让服务器知道有新的客户端要上来了,立刻新创建一个 Session,

模拟登陆、Cookie传递

---恢复内容开始--- 上个月月底把模拟登陆的问题解决了,现在有时间就正好记录并复习一下. 主要使用httpclient 来进行模拟登陆 首先做一个登陆布局  一直以来都是简单拖几个控件 没有啥特效  这次我想使用一点 Material Design设计风格    查了一下 TextInputLayout这个控件  还不错 TextInputLayout 来自于 Android Design Support Library    可以让edittext的hint在用户输入的时候  自动跳到上方

PHP实现curl和snoopy类模拟登陆方法

Snoopy.class.php下载 方法/步骤 第一种:使用snoopy类实现模拟登陆 1.在网上下载一个Snoopy.class.php的文件   2.代码实现: <?php set_time_limit(0); require "Snoopy.class.php"; $snoopy=new Snoopy(); $snoopy->referer='你要模拟登陆的域名';//例如:http://www.baidu.com/ $snoopy->agent="

Jsoup模拟登陆例子

Jsoup模拟登陆小例子,不同的网站,需要不同的模拟策略,散仙在这里仅仅作为一个引导学习. Java代码   package com.jsouplogin; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.Connection.Method; import org.