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读入,默认情况下是truehttpConn.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());//获取服务端返回的cookiecookie = 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
http模拟登陆及发请求相关推荐
- postman模拟登陆后的请求 COOKIE PHPSESSID
开发网页的时候,很多页面都需要登录之后才能请求,否则会跳转到登陆页面,这时候,我们可以使用postman进行模拟请求,携带上登陆后的PHPSESSID即可,后端验证是否登陆就是根据这个PHPSESSI ...
- python github登陆_用Python模拟登陆GitHub并获取信息
最近在研究如何对搜狗搜索公众号文章进行爬取,由于需要用到Cookies,所以这回先了解下Cookies的相关知识. 搜狗的反爬有点厉害,即使我用了高匿代理,它还是会提醒我IP访问过于频繁,然后跳转验证 ...
- Python3 微信公众平台模拟登陆 requests模拟请求
声明此代码仅供技术交流学习,擅自用于其他,一切后果与本人无关 目标网址: https://mp.weixin.qq.com/ 所谓模拟登陆,就是自己模拟构造请求发送给服务器,然后服务器返回认证的信息过 ...
- 【转】使用C#发送Http 请求实现模拟登陆(以博客园为例)
[转]使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也 ...
- 爬虫实战学习笔记_2 网络请求urllib模块+设置请求头+Cookie+模拟登陆
1 urllib模块 1.1 urllib模块简介 Python3中将urib与urllib2模块的功能组合,并且命名为urllib.Python3中的urllib模块中包含多个功能的子模块,具体内容 ...
- 使用C#发送Http 请求实现模拟登陆(以博客园为例)
使用C#发送Http 请求实现模拟登陆(以博客园为例) 原文:使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到c ...
- python输入学号返回成绩_Python模拟登陆正方教务系统并抓取成绩单
学校的教务系统是正方的,在大学期间无论是选课.报名还是查成绩,几乎都要和它打交道,上学期在积累了一定的爬虫和web知识后,我就想着用Python模拟登陆教务系统,实现在命令行里方便地进行成绩或课表的查 ...
- 网络爬虫中的模拟登陆获取数据(实例教学1)
目录 模拟登陆的原因 如何模拟登陆 实战(demo) 模拟登陆的原因 很多网站,我们是无法直接获得服务器返回的数据,需要输入用户名及密码才能看到数据.如我们登陆人人网时,网站网址http://www. ...
- Python模拟登陆,解密js代码实例:知乎登陆
本文转载自公众号 | 日常学Python 作者 | sergiojune 如果你现在想模拟登陆知乎,会发现 fromdata 是一串加密的字符串 image 看了之后是不是很痛苦?你是不是就想使用 s ...
最新文章
- python使用numpy中的flatten函数将2D numpy数组拉平为1Dnumpy数组、使用np.linalg.matrix_rank函数计算2D numpy数组的秩(rank)
- 捋一下测序后生信分析内容及其常用软件
- 工业富联2018年报来了!上市后首张成绩单大起底
- 小白爬虫scrapy第三篇
- Subsequences (easy version)
- oracle昨日时间,。。今日,昨日,上周,本月,本年,按时间统计总金额
- Linux笔记-手动配置yum及光盘安装rz
- Python__repr__()方法:显示属性
- 【Linux】Ubuntu安装命令
- 数据结构上机实践第13周项目1 - 验证Prim算法的验证
- 1096 大美数 – PAT乙级真题
- startActivitystartActivities有什么不同?
- Python快速读取超大文件
- Linux openwrt 树莓派 香蕉派 嵌入式 usb 声卡 PCM2704 2705 2706 CM108 PCM2704/2705/2706 linux专用声卡 专用usb声卡
- docker 离线安装 mysql_Linux下离线安装Docker
- 中职生计算机系自我推荐作文,中职生自我鉴定
- 3d打印技术应用实例_3D打印(工作,优势和应用)
- 进入BeOS的花花世界 系列三
- 电脑外置,笔记本电脑外接显卡,教您笔记本如何外接独显
- return的返回值
热门文章
- 那些年我们踩过的一些坑之 ClickHouse
- 大数据平台之初体验 | 网易猛犸 | 数据仓库、调度系统、数据质量、离线与实时计算应有尽有。
- Python类中的私有属性和私有方法
- icml和nips等各类重要会议论文收集
- 八段LED数码管段代码编码表
- 实时人脸识别例子-tensorflow2.x keras
- python最小二乘法求a b_python_numpy实用的最小二乘法理解
- ssl双向认证_详解TLS/SSL运行机制
- AMI corpus download
- win10家庭版 安装docker并成功使用