Apache HttpClient是Java中经常使用的Http Client,总结下HttpClient4中经常使用的post请求用法。

1 Basic Post

使用2个参数进行post请求:

@Test
public void whenPostRequestUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://www.example.com");List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("username", "John"));params.add(new BasicNameValuePair("password", "pass"));httpPost.setEntity(new UrlEncodedFormEntity(params));CloseableHttpResponse response = client.execute(httpPost);assertThat(response.getStatusLine().getStatusCode(), equalTo(200));client.close();
}

2 POST with Authorization

使用Post进行Basic Authentication credentials验证:

@Test
public void whenPostRequestWithAuthorizationUsingHttpClient_thenCorrect()throws ClientProtocolException, IOException, AuthenticationException {CloseableHttpClient client = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://www.example.com");httpPost.setEntity(new StringEntity("test post"));UsernamePasswordCredentials creds = new UsernamePasswordCredentials("John", "pass");httpPost.addHeader(new BasicScheme().authenticate(creds, httpPost, null));CloseableHttpResponse response = client.execute(httpPost);assertThat(response.getStatusLine().getStatusCode(), equalTo(200));client.close();
}

3 Post with JSON

使用JSON body进行post请求:

@Test
public void whenPostJsonUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://www.example.com");String json = "{"id":1,"name":"John"}";StringEntity entity = new StringEntity(json);httpPost.setEntity(entity);httpPost.setHeader("Accept", "application/json");httpPost.setHeader("Content-type", "application/json");CloseableHttpResponse response = client.execute(httpPost);assertThat(response.getStatusLine().getStatusCode(), equalTo(200));client.close();
}

4 Post with HttpClient Fluent API

使用Request进行post请求:

@Test
public void whenPostFormUsingHttpClientFluentAPI_thenCorrect() throws ClientProtocolException, IOException {HttpResponse response = Request.Post("http://www.example.com").bodyForm(Form.form().add("username", "John").add("password", "pass").build()).execute().returnResponse();assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

5 Post Multipart Request

Post一个Multipart Request:

@Test
public void whenSendMultipartRequestUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://www.example.com");MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addTextBody("username", "John");builder.addTextBody("password", "pass");builder.addBinaryBody("file", new File("test.txt"),ContentType.APPLICATION_OCTET_STREAM, "file.ext");HttpEntity multipart = builder.build();httpPost.setEntity(multipart);CloseableHttpResponse response = client.execute(httpPost);assertThat(response.getStatusLine().getStatusCode(), equalTo(200));client.close();
}

6 Upload a File using HttpClient

使用一个Post请求上传一个文件:

@Test
public void whenUploadFileUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://www.example.com");MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addBinaryBody("file", new File("test.txt"),ContentType.APPLICATION_OCTET_STREAM, "file.ext");HttpEntity multipart = builder.build();httpPost.setEntity(multipart);CloseableHttpResponse response = client.execute(httpPost);assertThat(response.getStatusLine().getStatusCode(), equalTo(200));client.close();
}

7 Get File Upload Progress

使用HttpClient获取文件上传的进度。扩展HttpEntityWrapper 获取进度。

上传代码:

@Test
public void whenGetUploadFileProgressUsingHttpClient_thenCorrect()throws ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://www.example.com");MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addBinaryBody("file", new File("test.txt"), ContentType.APPLICATION_OCTET_STREAM, "file.ext");HttpEntity multipart = builder.build();ProgressEntityWrapper.ProgressListener pListener = new ProgressEntityWrapper.ProgressListener() {@Overridepublic void progress(float percentage) {assertFalse(Float.compare(percentage, 100) > 0);}};httpPost.setEntity(new ProgressEntityWrapper(multipart, pListener));CloseableHttpResponse response = client.execute(httpPost);assertThat(response.getStatusLine().getStatusCode(), equalTo(200));client.close();
}

观察上传进度接口:

public static interface ProgressListener {void progress(float percentage);
}

扩展了HttpEntityWrapperProgressEntityWrapper:

public class ProgressEntityWrapper extends HttpEntityWrapper {private ProgressListener listener;public ProgressEntityWrapper(HttpEntity entity, ProgressListener listener) {super(entity);this.listener = listener;}@Overridepublic void writeTo(OutputStream outstream) throws IOException {super.writeTo(new CountingOutputStream(outstream, listener, getContentLength()));}
}

扩展了FilterOutputStreamCountingOutputStream:

public static class CountingOutputStream extends FilterOutputStream {private ProgressListener listener;private long transferred;private long totalBytes;public CountingOutputStream(OutputStream out, ProgressListener listener, long totalBytes) {super(out);this.listener = listener;transferred = 0;this.totalBytes = totalBytes;}@Overridepublic void write(byte[] b, int off, int len) throws IOException {out.write(b, off, len);transferred += len;listener.progress(getCurrentProgress());}@Overridepublic void write(int b) throws IOException {out.write(b);transferred++;listener.progress(getCurrentProgress());}private float getCurrentProgress() {return ((float) transferred / totalBytes) * 100;}
}

总结

简单举例说明如何使用Apache HttpClient 4进行各种post请求。做个笔记。

本文转自阿凡卢博客园博客,原文链接:http://www.cnblogs.com/luxiaoxun/p/6165237.html,如需转载请自行联系原作者

Post with HttpClient相关推荐

  1. java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...

    JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取) 发布时间:2018-05-18 16:41, 浏览次数:632 , 标签: JAVA HttpClien ...

  2. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  3. 关于HttpClient上传中文乱码的解决办法

    使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单: 第一步:设置Mult ...

  4. java url json字符串_使用HttpClient将URL中的JSON查询字符串发送到Web服务(Java)

    我有一个我建立的Web服务...我现在要做的是发送一个简单的请求,其中包含一个从Tapestry Web应用程序到该Web服务的json查询字符串.我四处搜索,大多数人都说使用Apache HttpC ...

  5. java rest httpclient_java http请求建议使用webClient,少用RestTemplate,不用HttpClient

    简介: webClient:是Spring-webFlux包下的,非阻塞响应,最低java8支持函数式编程,性能好 RestTemplate:是Spring-webmvc包下的,满足RestFul原则 ...

  6. 【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建

    ng g s services/http app.module.ts ... @NgModule({declarations: [...],imports: [...HttpClientModule, ...

  7. Angular 4+ HttpClient

    个人博客迁移至 http://www.sulishibaobei.com  处: 这篇,算是上一篇Angular 4+ Http的后续: Angular 4.3.0-rc.0 版本已经发布?.在这个版 ...

  8. HttpClient学习

    HttpClient学习 (1)下面列举几个主要的Http相关概念的类 类名 描述 HttpClient 建立请求客户端 HttpGet 代表请求方法,类似的还有HttpHead, HttpPost, ...

  9. 漫谈Httpclient

    引用地址: http://hc.apache.org/httpclient-3.x/ End of life The Commons HttpClient project is now end of ...

  10. 使用HttpClient实现跨服务图片下载

    需求: 由于web系统存放图片的文件夹路径和erp系统存放图片的文件夹路径不一样 所以 web系统文件上传的文件要拷贝到erp对应的文件夹 思路: 在erp中访问图片接口的时候,如果图片不存在,则调w ...

最新文章

  1. Web 服务编程,REST 与 SOAP
  2. 微软发布新的Azure Pipelines功能和集成
  3. hadoop 全分布式部署
  4. 【建议收藏】这个工具专门用于寻找路由器中的安全漏洞
  5. 第九天学习Java的笔记(方法重载)
  6. 代码评审的不可能三角
  7. 考公专业科目计算机,2017国考中国证监会专业科目考试大纲(计算机类)
  8. 计算机控制lc72131,lc72131(1)
  9. 15个著名的设计心理学原理以及在设计中的应用
  10. 详解Spring框架的AOP机制
  11. Pentium M处理器架构/微架构/流水线 (2) - 数据预取/乱序核/退役单元
  12. 古风手机壁纸,国潮的你不可错过!
  13. JAVA导入导出Excel
  14. accept 返回0_Netty深入浅出系列:Netty源码分析之accept过程
  15. 八数码问题c语言,八数码问题的可解性
  16. tbc新服务器没消息,暴雪蓝贴官宣TBC怀旧服2021年内上线,所有服务器直升70级
  17. SMTP邮箱服务器发送邮件
  18. 安卓APP测试要怎么测,测试流程和重点有哪些?我来告诉你
  19. 用Windows电脑看epub小说,哪些阅读器软件更好用?
  20. 椭圆曲线密码算术(ECC)原理

热门文章

  1. 机器学习漫谈:深度学习的辉煌
  2. 化身“监工”的AI,我们该如何相处?
  3. 物理哲学和生物哲学的对抗
  4. 物联网面临的7大网络安全威胁
  5. DeepMind-深度学习: AI革命及其前沿进展 (54页ppt报告)
  6. 盘点那些具有“爆款”潜力的智能家居产品
  7. 程序员加入新团队必问的 20 道问题
  8. 程序员毕业两年,如何在帝都购房上车?
  9. 互联网人的生存指南 | 每日趣闻
  10. Pandas/networkx图分析简单入门