ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java实现类似python requests的session功能

2019-11-05 18:01:58  阅读:205  来源: 互联网

标签:java String python paramsMap url session new import


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

在pom.xml中加入相关依赖

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.2.2</version>
</dependency>

  后面是相关的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<String, List<Cookie>> cookieStore = new HashMap<>();

        @Override
        public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
            cookieStore.put(url.host(), cookies);
        }

        @Override
        public List<Cookie> loadForRequest(HttpUrl url) {
            List<Cookie> cookies = cookieStore.get(url.host());
            return cookies != null ? cookies : new ArrayList<Cookie>(){};
        }
    }

    /**
     * @param url  要请求的url
     * @param  paramsMap post的请求参数
     * @return  post的返回结果
     */
    public String post(String url, HashMap<String, String > paramsMap){

        FormBody.Builder formBodyBuilder = new FormBody.Builder();
        Set<String> 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<String,String> 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();
    }

}

  

标签:java,String,python,paramsMap,url,session,new,import
来源: https://www.cnblogs.com/linwenbin/p/11800132.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有