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 如图: 可以看到登陆时候是需要验证码的,验证 ...
随机推荐
- SpringMVC使用@ResponseBody时返回json的日期格式及可能产生的问题
http://blog.csdn.net/z69183787/article/details/40375831 遇到的问题: 1 条件: 1.1.表单里有两个时间参数,都是作为隐藏项随表单一起提交: ...
- UnitOfWork 更新实体出错解决办法
用UnitOfWork进行实体更新的时候,再查询实体一次,再去更新的时候会报如下错误: Attaching an entity of type 'TinyFrame.Data.DomainModel. ...
- Windows 下 Chrome 快捷键大全
Windows 下 Chrome 快捷键大全,即 Google 浏览器的快捷键. 1 Ctrl+N 打开新窗口. 2 Ctrl+T 打开新标签页. 3 Ctrl+Shift+N 在隐身模式下打开新窗口 ...
- 如何在 CentOS 7 上安装 Docker
Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止.Docker 帮助系统管理员和程序员在容器中开发应用程序,并且 ...
- Go并发编程(四)
并发基础 多进程 多线程 基于回调的非阻塞/异步IO 协程 协程 与传统的系统级线程和进程相比,协程的最大优势在于其“轻量级”,可以轻松创建上百万个而不会导致系统资源衰竭, ...
- Javascript获取IFrame内容(兼容IE&FF)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wintys.blog.51cto.com/425414/123303 作者: W ...
- php大数除法保留精度问题
有人在群里问大数除法,要求保留精度的问题,发现普通的方法都不能保存精度,最后找了一下资料发现可以这样 这倒是个冷门知识,嗯哼
- 错误 error C2678: 二进制“<”: 没有找到接受“const card”类型的左操作数的运算符(或没有可接受的转换)
错误出现的地方如下 而我又重载了<运算符,但是我没有将<运算符重载函数定义成const类型,此处是const _Ty&,不可以调用非const成员函数 而且,一般而言,像<, ...
- python中交换两个值的方法
a = 4b = 5 #第1种c = 0c = aa = bb = c #第2种a = a+bb = a-ba = a-b #第3种a,b = b,a 第三种办法本质上是元组之间的赋值 print(& ...
- ibatis 引入多个model
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "- ...