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);
}
}
}
分类:
Java基础知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库