怎么在java中实现类似于python的requests模块的session功能呢。java也是可以实现的,用java的okhttp包可以实现。

在pom.xml中加入相关依赖

com.squareup.okhttp3

okhttp

4.2.2

后面是相关的java代码:

package com.puple.atto.datastructure;

import java.text.MessageFormat;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Set;

import java.util.regex.*;

import okhttp3.Cookie;

import okhttp3.CookieJar;

import okhttp3.FormBody;

import okhttp3.HttpUrl;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

public class Session {

private final OkHttpClient mOkHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJarManager()).build();

//   //如果直接写个类,里面写saveFromResponse和loadForRequest,而不实现CookieJar接口,运行可以正常通过,但ide会显红,因为Bulider类的cookieJsr方法需要接受CookieJar类型的实例。鸭子类除了能节约代码行数,在可理解性 可读性 多人合作性上面都不如接口规范,谁知道鸭子类里面要写什么方法,除了写代码得人自己。

private class CookieJarManager implements CookieJar{

private final HashMap> cookieStore = new HashMap<>();

@Override

public void saveFromResponse(HttpUrl url, List cookies) {

cookieStore.put(url.host(), cookies);

}

@Override

public List loadForRequest(HttpUrl url) {

List cookies = cookieStore.get(url.host());

return cookies != null ? cookies : new ArrayList(){};

}

}

/**

* @param url 要请求的url

* @param paramsMap post的请求参数

* @return post的返回结果

*/

public String post(String url, HashMap paramsMap){

FormBody.Builder formBodyBuilder = new FormBody.Builder();

Set keySet = paramsMap.keySet();

for(String key:keySet) {

String value = paramsMap.get(key);

formBodyBuilder.add(key,value);

}

FormBody formBody = formBodyBuilder.build();

Request request = new Request

.Builder()

.post(formBody)

.url(url)

.build();

try (Response response = mOkHttpClient.newCall(request).execute()) {

String respStr = response.body().string();

return respStr;

}catch (Exception e){

e.printStackTrace();

return "";

}

}

public String get(String url) {

final Request.Builder builder = new Request.Builder();

builder.url(url);

final Request request = builder.build();

try (Response response = mOkHttpClient.newCall(request).execute()) {

return response.body().string();

}catch (Exception e){

e.printStackTrace();

return "";

}

}

public static void test(){

Session ss=new Session();

String loginUrl="http://192.168.9.244:8080/RDCJWeb/login";

HashMap paramsMap = new HashMap<>() ;

paramsMap.put("username","soft1");

paramsMap.put("password","soft1");

String respStr = ss.post(loginUrl,paramsMap);

String res=ss.get("http://192.168.9.244:8080/RDCJWeb/static/dist/html/deviceWarn.html");

System.out.println(res);

}

public static void main(String[] args) {

test();

}

}

原文:https://www.cnblogs.com/linwenbin/p/11800132.html

python requests java_java实现类似python requests的session功能相关推荐

  1. fedora下重用ssh连接 类似secureCRT的clone session功能

    http://hatemysql.com/tag/ssh/ 本人用的fedora 12操作系统,终端里面,ssh登录到一台机器,重复登录的话,你还是要输入密码.有没有像secureCRT一样的clon ...

  2. Java 爬虫--类似Python的requests库--HttpClient, HttpAsyncClient--Maven

    今天在找Java的爬虫的库,发现Java的爬虫框架挺多的,常见的有nutch,Heritrix,crawler4j等. 但我想要的是类似Python的requests库的Java库. 看到一个库叫Un ...

  3. python怎么安装request_【python】如何安装requests

    在cmd窗口输入pip install requests即可,如下 C:\Users\horn1\Desktop\python\4>pip install requests Collecting ...

  4. 【Python爬虫学习笔记3】requests库

    在上一篇中学习了urllib库的基本使用,通过它我们可以完成爬虫中发送请求和处理响应的大部分功能,但在实际使用中多少会很繁琐,比如处理Cookie时需要创建handler和opener对象.正因为如此 ...

  5. python爬虫库的常见用法_$python爬虫系列(2)—— requests和BeautifulSoup库的基本用法...

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  6. python爬虫系列(2)—— requests和BeautifulSoup

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  7. python爬虫系列(2)—— requests和BeautifulSoup库的基本用法

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  8. python requests 动态加载_python requests 高级用法

    HTTP动词 Requests 提供了几乎所有HTTP动词的功能:GET.OPTIONS.HEAD.POST.PUT.PATCH.DELETE.以下内容为使用 Requests 中的这些动词以及 Gi ...

  9. python爬虫用urllib还是reques,python爬虫中urllib.request和requests有什么区别?

    在学习python爬虫,想要检索request相关内容时,往往会出现urllib.request和requests这两个词,urllib.request和requests都是python爬虫的模块,其 ...

最新文章

  1. 《人民日报》发声:科研人员收入理应体现他们的价值
  2. 你应该将应用迁移到Spring 4的五个原因
  3. CF932G Palindrome Partition
  4. 键盘鼠标录制哪个好用_好看好用还不贵的那种键盘鼠标真的有吗?这次还真让我碰到了...
  5. interface接口实例
  6. c语言实参和形参占用存储单元_必须知道的C语言知识细节:函数形参和实参的区别...
  7. 监护仪系统都是Linux吗,基于Linux和MiniGUI的心电监护仪设计 (1)
  8. Java 案例三 随机点名器
  9. Android开发之本地音乐播放器(简单粗暴版)
  10. BigDATA面试题
  11. QCon-小布助手对话系统工程实践
  12. 360插件化方案RePlugin学习笔记-插件使用宿主中的类
  13. Win7/Win8安装我们无法创建新的分区,也找不到现有的分区的解决方法
  14. 前端Q知识体系梳理与面试准备直播回顾
  15. 欧洲共同语言参考标准英语c1,美国小学英语3年级语言知识对标欧洲共同语言参考标准CEFR...
  16. 10_Rapidly Exploring Random Trees_宾夕法尼亚大学机器人运动规划专项课程【学习笔记】
  17. MSP430待机功耗问题
  18. 词根、词缀笔记(一)
  19. Qt之开源绘图控件QCustomPlot
  20. JS下载图片到本地,解决跨域问题

热门文章

  1. 两种交换排序算法:冒泡排序和快速排序
  2. java面向对象知识汇总的思维导图
  3. Spring MVC的优势
  4. 终端服务器有多种运行模式,云终端的三种工作模式你都知道的吗
  5. 面试官问:为什么String的hashCode选择 31 作为乘子?
  6. 信息系统项目管理知识--信息系统建设
  7. 蓝桥杯-9-3摩尔斯电码(java)
  8. MySQL函数和操作符(超详细,备着查找)
  9. JPA持久化异常:PersistenceException: org.hibernate.PersistentObjectException
  10. 算法--组合数学:杨辉三角数学分析以及Java实现