首先声明下,如果服务端写入的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模拟登陆及发请求相关推荐

  1. postman模拟登陆后的请求 COOKIE PHPSESSID

    开发网页的时候,很多页面都需要登录之后才能请求,否则会跳转到登陆页面,这时候,我们可以使用postman进行模拟请求,携带上登陆后的PHPSESSID即可,后端验证是否登陆就是根据这个PHPSESSI ...

  2. python github登陆_用Python模拟登陆GitHub并获取信息

    最近在研究如何对搜狗搜索公众号文章进行爬取,由于需要用到Cookies,所以这回先了解下Cookies的相关知识. 搜狗的反爬有点厉害,即使我用了高匿代理,它还是会提醒我IP访问过于频繁,然后跳转验证 ...

  3. Python3 微信公众平台模拟登陆 requests模拟请求

    声明此代码仅供技术交流学习,擅自用于其他,一切后果与本人无关 目标网址: https://mp.weixin.qq.com/ 所谓模拟登陆,就是自己模拟构造请求发送给服务器,然后服务器返回认证的信息过 ...

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

    [转]使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也 ...

  5. 爬虫实战学习笔记_2 网络请求urllib模块+设置请求头+Cookie+模拟登陆

    1 urllib模块 1.1 urllib模块简介 Python3中将urib与urllib2模块的功能组合,并且命名为urllib.Python3中的urllib模块中包含多个功能的子模块,具体内容 ...

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

    使用C#发送Http 请求实现模拟登陆(以博客园为例) 原文:使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到c ...

  7. python输入学号返回成绩_Python模拟登陆正方教务系统并抓取成绩单

    学校的教务系统是正方的,在大学期间无论是选课.报名还是查成绩,几乎都要和它打交道,上学期在积累了一定的爬虫和web知识后,我就想着用Python模拟登陆教务系统,实现在命令行里方便地进行成绩或课表的查 ...

  8. 网络爬虫中的模拟登陆获取数据(实例教学1)

    目录 模拟登陆的原因 如何模拟登陆 实战(demo) 模拟登陆的原因 很多网站,我们是无法直接获得服务器返回的数据,需要输入用户名及密码才能看到数据.如我们登陆人人网时,网站网址http://www. ...

  9. Python模拟登陆,解密js代码实例:知乎登陆

    本文转载自公众号 | 日常学Python 作者 | sergiojune 如果你现在想模拟登陆知乎,会发现 fromdata 是一串加密的字符串 image 看了之后是不是很痛苦?你是不是就想使用 s ...

最新文章

  1. python使用numpy中的flatten函数将2D numpy数组拉平为1Dnumpy数组、使用np.linalg.matrix_rank函数计算2D numpy数组的秩(rank)
  2. 捋一下测序后生信分析内容及其常用软件
  3. 工业富联2018年报来了!上市后首张成绩单大起底
  4. 小白爬虫scrapy第三篇
  5. Subsequences (easy version)
  6. oracle昨日时间,。。今日,昨日,上周,本月,本年,按时间统计总金额
  7. Linux笔记-手动配置yum及光盘安装rz
  8. Python__repr__()方法:显示属性
  9. 【Linux】Ubuntu安装命令
  10. 数据结构上机实践第13周项目1 - 验证Prim算法的验证
  11. 1096 大美数 – PAT乙级真题
  12. startActivitystartActivities有什么不同?
  13. Python快速读取超大文件
  14. Linux openwrt 树莓派 香蕉派 嵌入式 usb 声卡 PCM2704 2705 2706 CM108 PCM2704/2705/2706 linux专用声卡 专用usb声卡
  15. docker 离线安装 mysql_Linux下离线安装Docker
  16. 中职生计算机系自我推荐作文,中职生自我鉴定
  17. 3d打印技术应用实例_3D打印(工作,优势和应用)
  18. 进入BeOS的花花世界 系列三
  19. 电脑外置,笔记本电脑外接显卡,教您笔记本如何外接独显
  20. return的返回值

热门文章

  1. 那些年我们踩过的一些坑之 ClickHouse
  2. 大数据平台之初体验 | 网易猛犸 | 数据仓库、调度系统、数据质量、离线与实时计算应有尽有。
  3. Python类中的私有属性和私有方法
  4. icml和nips等各类重要会议论文收集
  5. 八段LED数码管段代码编码表
  6. 实时人脸识别例子-tensorflow2.x keras
  7. python最小二乘法求a b_python_numpy实用的最小二乘法理解
  8. ssl双向认证_详解TLS/SSL运行机制
  9. AMI corpus download
  10. win10家庭版 安装docker并成功使用