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 如图: 可以看到登陆时候是需要验证码的,验证 ...
随机推荐
- 对事件委托绑定click的事件的解绑
大家都知道解绑事件的jquery写法,很简单: $("xxx").unbind("click"); 然后对于事件委托式的事件绑定,亲测,这种解绑方法是无效的, ...
- 用Lua实现string的trim()方法
function trim1(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end -- from PiL2 20.4 fu ...
- unity之UGUI屏幕分辨率調整
1.Canvas的屬性配置: 2.Canvas Scaler的屬性配置: 3.根據不同的屏幕比例動態寫改碩放基準: public float standard_width = 800f; //初始宽度 ...
- 复制js的“准”正确用法
function kobe(id) { var targetText = document.getElementById(id); try ...
- js中的string.format
String.prototype.format = function(args) { var result = this; if (arguments.length > 0) { if (arg ...
- 删除ORACLE目录OCI.dll文件无法删除 (转)
删除ORACLE目录OCI.dll文件无法删除 今天准备把虚拟机里的10g卸载安装11g来研究一些新特性 卸载没有用自带的UnInstall工具之前看warehouse的讲课视频凭记忆手动卸载了下删除 ...
- Docker应用之容器
容器是独立运行的一个或一组应用,以及他们的运行态环境 1.启动容器(基于镜像新建一个容器并启动或将终止状态的容器重新启动) run后面添加--name参数可以指定容器的名称,否则系统默认会给名称:使用 ...
- 配置Django框架为生产环境的注意事项(DEBUG=False)
问题描述: Django1.10版本中框架中settings.py配置文件 配置文件settings.py配置了下面两项: DEBUG= False ALLOWED_HOSTS = ['*'] #这样 ...
- Nginx(六)-- 配置文件之Gzip
1.概念及作用 Gizp主要对内容.静态文件做压缩,用来提升网站访问速度,节省带宽. 2.使用方法 gzip既可以配置在server中,也可以配置在server外,此处配置在server中,如下: ...
- [转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃
简单使用SetUnhandledExceptionFilter()函数让程序优雅崩溃 虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束.并且发送 ...