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="Ismp!@#$";
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);
} }
http模拟登陆及发请求的更多相关文章
- .net 模拟登陆 post https 请求跳转页面
AllowAutoRedirect property is true, the Referer property is set automatically when the request is re ...
- python 模拟登陆,请求包含cookie信息
需求: 1.通过GET方法,访问URL地址一,传入cookie参数 2.根据地址一返回的uuid,通过POST方法,传入cooki参数 实现思路: 1.理解http的GET和POST差别 (网上有很多 ...
- PHP curl 携带cookie请求抓取源码,模拟登陆。
公司需要采集一批手机号码,有指定网站.但是需要登陆后才能看到客户号码,手动点击复制太慢,如此就写了以下模拟登陆采集号码程序,分享给大家参考参考. function request_url_data($ ...
- python模拟登陆之下载
好长时间没有更新博客了,哈哈. 今天公司给了这么一个需求,现在我们需要去淘宝获取上一天的订单号,然后再根据订单号去另一个接口去获取订单详情,然后再给我展示到web! 中间涉及到的技术点有: 模拟登陆 ...
- Scrapy基础(十四)————知乎模拟登陆
#-*-coding:utf-8 -*-__author__ = "ruoniao"__date__ = "2017/5/31 20:59" 之前我们通过爬取伯 ...
- scrapy爬取某网站,模拟登陆过程中遇到的那些坑
本节内容 在访问网站的时候,我们经常遇到有些页面必须用户登录才能访问.这个时候我们之前写的傻傻的爬虫就被ban在门外了.所以本节,我们给爬虫配置cookie,使得爬虫能保持用户已登录的状态,达到获得那 ...
- 模拟登陆CSDN——就是这么简单
工具介绍 本篇文章主要是解说怎样模拟登陆CSDN.使用的工具是HttpClient+Jsoup 当中HttpClient主要是负责发送请求,而Jsoup主要是解析HTML 你可能对HttpClient ...
- 【PHP开发】用curl向https发请求时的35号错误
放了个假发现以前写的程序的模拟登陆不管用了,中间输出,发现curl向https发请求时没有返回数据,输出错误信息,得到: curl_errno($ch) -----> 35 curl_error ...
- python+requests模拟登陆 学校选课系统
最近学校让我们选课,每天都有不同的课需要选....然后突发奇想试试用python爬学校选课系统的课程信息 先把自己的浏览器缓存清空,然后在登陆界面按f12 如图: 可以看到登陆时候是需要验证码的,验证 ...
随机推荐
- 一个标准的,兼容性很好的div仿框架的基础模型!
<!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type" conten ...
- showModalDialog介绍
基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) ...
- Linux静态库生成
Linux上的静态库,其实是目标文件的归档文件. 在Linux上创建静态库的步骤如下: 写源文件,通过 gcc -c xxx.c 生成目标文件. 用 ar 归档目标文件,生成静态库. 配合静态库,写一 ...
- EditDistance,求两个字符串最小编辑距离,动态规划
问题描述: 题目描述Edit DistanceGiven two words word1 and word2, find the minimum number of steps required to ...
- C#WinForm窗体事件执行次序
当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件: System.Windows.Forms.Control.HandleCreated ...
- Android安装器学习笔记(一)
Android安装器学习笔记(一) 一.Android应用的四种安装方式: 1.通过系统应用PackageInstaller.apk进行安装,安装过程中会让用户确认 2.系统程序安装:在开机的时候自动 ...
- 5 -- Hibernate的基本用法 --1 ORM和Hibernate
目前流行的编程语言,如Java.C#等,它们都是面向对象的编程语言,而目前铸就的数据库产品,例如Oracle.DB2等,依然是关系数据库等.编程语言和底层数据库的发展不协调,催生出了ORM框架.ORM ...
- SpringBoot(十一)-- 动态数据源
SpringBoot中使用动态数据源可以实现分布式中的分库技术,比如查询用户 就在用户库中查询,查询订单 就在订单库中查询. 一.配置文件application.properties # 默认数据源 ...
- 使用 Splash
Splash 简介与安装 Splash Lua 脚本 Splash 对象属性 Splash 对象方法 Splash API 调用 Splash 负载均衡
- Unity Shader 自定义纹理坐标变量写法
Properties { _R(,)) = 1.0 _ColorTex("ColorTex (RGB)", 2D) = "red" {} struct Inpu ...