python requests java_java实现类似python requests的session功能
怎么在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功能相关推荐
- fedora下重用ssh连接 类似secureCRT的clone session功能
http://hatemysql.com/tag/ssh/ 本人用的fedora 12操作系统,终端里面,ssh登录到一台机器,重复登录的话,你还是要输入密码.有没有像secureCRT一样的clon ...
- Java 爬虫--类似Python的requests库--HttpClient, HttpAsyncClient--Maven
今天在找Java的爬虫的库,发现Java的爬虫框架挺多的,常见的有nutch,Heritrix,crawler4j等. 但我想要的是类似Python的requests库的Java库. 看到一个库叫Un ...
- python怎么安装request_【python】如何安装requests
在cmd窗口输入pip install requests即可,如下 C:\Users\horn1\Desktop\python\4>pip install requests Collecting ...
- 【Python爬虫学习笔记3】requests库
在上一篇中学习了urllib库的基本使用,通过它我们可以完成爬虫中发送请求和处理响应的大部分功能,但在实际使用中多少会很繁琐,比如处理Cookie时需要创建handler和opener对象.正因为如此 ...
- python爬虫库的常见用法_$python爬虫系列(2)—— requests和BeautifulSoup库的基本用法...
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- python爬虫系列(2)—— requests和BeautifulSoup
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- python爬虫系列(2)—— requests和BeautifulSoup库的基本用法
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- python requests 动态加载_python requests 高级用法
HTTP动词 Requests 提供了几乎所有HTTP动词的功能:GET.OPTIONS.HEAD.POST.PUT.PATCH.DELETE.以下内容为使用 Requests 中的这些动词以及 Gi ...
- python爬虫用urllib还是reques,python爬虫中urllib.request和requests有什么区别?
在学习python爬虫,想要检索request相关内容时,往往会出现urllib.request和requests这两个词,urllib.request和requests都是python爬虫的模块,其 ...
最新文章
- 《人民日报》发声:科研人员收入理应体现他们的价值
- 你应该将应用迁移到Spring 4的五个原因
- CF932G Palindrome Partition
- 键盘鼠标录制哪个好用_好看好用还不贵的那种键盘鼠标真的有吗?这次还真让我碰到了...
- interface接口实例
- c语言实参和形参占用存储单元_必须知道的C语言知识细节:函数形参和实参的区别...
- 监护仪系统都是Linux吗,基于Linux和MiniGUI的心电监护仪设计 (1)
- Java 案例三 随机点名器
- Android开发之本地音乐播放器(简单粗暴版)
- BigDATA面试题
- QCon-小布助手对话系统工程实践
- 360插件化方案RePlugin学习笔记-插件使用宿主中的类
- Win7/Win8安装我们无法创建新的分区,也找不到现有的分区的解决方法
- 前端Q知识体系梳理与面试准备直播回顾
- 欧洲共同语言参考标准英语c1,美国小学英语3年级语言知识对标欧洲共同语言参考标准CEFR...
- 10_Rapidly Exploring Random Trees_宾夕法尼亚大学机器人运动规划专项课程【学习笔记】
- MSP430待机功耗问题
- 词根、词缀笔记(一)
- Qt之开源绘图控件QCustomPlot
- JS下载图片到本地,解决跨域问题
热门文章
- 两种交换排序算法:冒泡排序和快速排序
- java面向对象知识汇总的思维导图
- Spring MVC的优势
- 终端服务器有多种运行模式,云终端的三种工作模式你都知道的吗
- 面试官问:为什么String的hashCode选择 31 作为乘子?
- 信息系统项目管理知识--信息系统建设
- 蓝桥杯-9-3摩尔斯电码(java)
- MySQL函数和操作符(超详细,备着查找)
- JPA持久化异常:PersistenceException: org.hibernate.PersistentObjectException
- 算法--组合数学:杨辉三角数学分析以及Java实现