http客户端相关信息总结

固定套路总结输出吧

hutool和apache的httpclient


import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.xiaoleilu.hutool.io.FileUtil;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.http.HttpHeaders;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;

/**
 * http client 实现
 *
 * 在HTTP客户端请求中,请求头部分可能包含以下内容:
 * 1. Host: 指示服务器主机名和端口号。
 * 2. User-Agent: 标识客户端应用的软件代理和版本号。
 * 3. Accept: 指定客户端能处理的媒体类型(MIME类型)。
 * 4. Accept-Language: 指定客户端的首选语言。
 * 5. Accept-Encoding: 指定客户端可接受的内容编码方式。
 * 6. Connection: 控制是否保持持久连接或关闭连接。
 * 7. Referer: 指示请求的来源地址(通常是上一个URL)。
 * 8. Cookie: 包含服务器设置的HTTP Cookie。
 * 9. Authorization: 带有身份验证凭据的请求。
 * 10. Cache-Control: 控制缓存机制的行为。
 *
 * 请求体部分是可选的,通常用于包含客户端向服务器发送的数据。常见的请求体内容可能有:
 *
 * 1. 表单数据:例如通过POST方法提交的表单字段和值。
 * 2. JSON或XML数据:用于发送结构化数据。
 * 3. 上传文件:将文件作为请求体进行上传。
 *
 *在HTTP客户端请求中,常见的Content-Type类型有以下几种:
 *
 * 1. text/plain:纯文本格式。
 * 2. text/html:HTML文档。
 * 3. application/json:JSON数据。
 * 4. application/xml:XML数据。
 * 5. application/x-www-form-urlencoded:默认的表单提交数据方式。
 * 6. multipart/form-data:用于文件上传和表单数据混合的形式。
 * 7. image/jpeg:JPEG图像。
 * 8. image/png:PNG图像。
 * 9. audio/mpeg:MPEG音频。
 * 10. video/mp4:MP4视频。
 *
 *
 * 总结, header内部存放的是验证类的信息在头部,请求踢存放form表单文件和数据等内容
 */
public class HttpClientFile {
    public static void main(String[] args) {
        httpString();
    }

    /**
     * hutool的方式
     */
//   https://hutool.cn/docs/#/http/Http%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7%E7%B1%BB-HttpUtil?id=%e6%a6%82%e8%bf%b0
    public static void httpHutoolToken(){
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("currentPage", "1");
        paramMap.put("pageSize", "5");
        HttpRequest post = HttpUtil.createPost("http://ps-shuqi:8808/cyb_bigdata/cyb_prd/ods/bussiness");
        post.form(paramMap);
        post.header("X-AURORA-TOKEN", "JPOJs03qn-ttxSbE");
        HttpResponse execute = post.execute();
        int status = execute.getStatus();
        String body = execute.body();
        System.out.println(status);
        System.out.println(body);
    }

    /**
     * 文件上传or下载demo
     */
//https://hutool.cn/docs/#/http/Http%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7%E7%B1%BB-HttpUtil?id=%e6%a6%82%e8%bf%b0
    public static void httpHutoolFileUpOrDown(){
        HashMap<String, Object> paramMap = new HashMap<>();
        //文件上传只需将参数中的键指定(默认file),值设为文件对象即可,对于使用者来说,文件上传与普通表单提交并无区别
        paramMap.put("file", FileUtil.file("D:\\face.jpg"));
//        HttpRequest post = HttpUtil.createPost("http://ps-shuqi:8808/cyb_bigdata/cyb_prd/ods/bussiness");
        String result= HttpUtil.post("https://www.baidu.com", paramMap);

        String fileUrl = "http://mirrors.sohu.com/centos/8.4.2105/isos/x86_64/CentOS-8.4.2105-x86_64-dvd1.iso";

        //将文件下载后保存在E盘,返回结果为下载文件大小
        try {
            OutputStream os = new FileOutputStream(new File(""));
            HttpUtil.download("",os,true);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        long size = HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"));
        System.out.println("Download size: " + size);
    }

    /**
     *
     *  StringEntity(), UrlEncodedFormEntity ,MultipartEntity
     *   UrlEncodeFormEntity会将参数以key1=value1&key2=value2的键值对形式发出。类似于传统的application/x-www-form-urlencoded表单上传
     *   StringEntity可以自己指定ContentType,而默认值是text/plain,数据的形式就非常自由了,可以组织成自己想要的任何形式,一般用来存储json数据
     *   MultipartEntity文件上传用到,类似于表单的类型为multipart/form-data
     * 可以看出,UrlEncodedFormEntity()的形式比较单一,只能是普通的键值对,局限性相对较大。
     * 而StringEntity()的形式比较自由,只要是字符串放进去,不论格式都可以。
     * 下面是3种方法的使用:
     *
     */
    public static void httpString() {
        try {
            HttpClient client = new HttpClient();
//           设置代理
//            client.getHostConfiguration().setProxy("proxy_host_addr",8080);
//            使用get 方法
//            GetMethod method = new GetMethod("http://ps-shuqi-pxy1:8080/batch/");
//            使用post 方法
            PostMethod method = new PostMethod("http://ps-shuqi:8088/cyb_bigdata/cyb_prd/cyb_cdm_data_trans/cyb/ods/bussiness");
            method.addRequestHeader(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
            method.addRequestHeader("X-AURORA-TOKEN", "JPOJs03qn-ttxSbE");
//            requestentity怎么使用?
            method.setRequestEntity(new StringRequestEntity("{\"currentPage\":\"2\",\"pageSize\":\"5\"}", "application/json; charset=UTF-8", "UTF-8"));

            client.executeMethod(method);
            if (method.getStatusCode() == 200) {
                String responseBodyAsString = method.getResponseBodyAsString();
                System.out.println("===========" + responseBodyAsString);
                JSONObject parse = (JSONObject) JSONObject.parse(responseBodyAsString);
                System.out.println(parse.get("code"));
            } else {
                System.out.println("connect fail");
            }
            method.releaseConnection();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

}

posted @ 2023-08-22 09:33  堕落先锋  阅读(21)  评论(0编辑  收藏  举报