Post with HttpClient
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); }
扩展了HttpEntityWrapper的ProgressEntityWrapper:
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()));} }
扩展了FilterOutputStream的CountingOutputStream:
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相关推荐
- java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...
JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取) 发布时间:2018-05-18 16:41, 浏览次数:632 , 标签: JAVA HttpClien ...
- httpclient工具类,post请求发送json字符串参数,中文乱码处理
在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...
- 关于HttpClient上传中文乱码的解决办法
使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单: 第一步:设置Mult ...
- java url json字符串_使用HttpClient将URL中的JSON查询字符串发送到Web服务(Java)
我有一个我建立的Web服务...我现在要做的是发送一个简单的请求,其中包含一个从Tapestry Web应用程序到该Web服务的json查询字符串.我四处搜索,大多数人都说使用Apache HttpC ...
- java rest httpclient_java http请求建议使用webClient,少用RestTemplate,不用HttpClient
简介: webClient:是Spring-webFlux包下的,非阻塞响应,最低java8支持函数式编程,性能好 RestTemplate:是Spring-webmvc包下的,满足RestFul原则 ...
- 【请求后台接口】30秒完成Angular10精简版HttpClient请求服务搭建
ng g s services/http app.module.ts ... @NgModule({declarations: [...],imports: [...HttpClientModule, ...
- Angular 4+ HttpClient
个人博客迁移至 http://www.sulishibaobei.com 处: 这篇,算是上一篇Angular 4+ Http的后续: Angular 4.3.0-rc.0 版本已经发布?.在这个版 ...
- HttpClient学习
HttpClient学习 (1)下面列举几个主要的Http相关概念的类 类名 描述 HttpClient 建立请求客户端 HttpGet 代表请求方法,类似的还有HttpHead, HttpPost, ...
- 漫谈Httpclient
引用地址: http://hc.apache.org/httpclient-3.x/ End of life The Commons HttpClient project is now end of ...
- 使用HttpClient实现跨服务图片下载
需求: 由于web系统存放图片的文件夹路径和erp系统存放图片的文件夹路径不一样 所以 web系统文件上传的文件要拷贝到erp对应的文件夹 思路: 在erp中访问图片接口的时候,如果图片不存在,则调w ...
最新文章
- Web 服务编程,REST 与 SOAP
- 微软发布新的Azure Pipelines功能和集成
- hadoop 全分布式部署
- 【建议收藏】这个工具专门用于寻找路由器中的安全漏洞
- 第九天学习Java的笔记(方法重载)
- 代码评审的不可能三角
- 考公专业科目计算机,2017国考中国证监会专业科目考试大纲(计算机类)
- 计算机控制lc72131,lc72131(1)
- 15个著名的设计心理学原理以及在设计中的应用
- 详解Spring框架的AOP机制
- Pentium M处理器架构/微架构/流水线 (2) - 数据预取/乱序核/退役单元
- 古风手机壁纸,国潮的你不可错过!
- JAVA导入导出Excel
- accept 返回0_Netty深入浅出系列:Netty源码分析之accept过程
- 八数码问题c语言,八数码问题的可解性
- tbc新服务器没消息,暴雪蓝贴官宣TBC怀旧服2021年内上线,所有服务器直升70级
- SMTP邮箱服务器发送邮件
- 安卓APP测试要怎么测,测试流程和重点有哪些?我来告诉你
- 用Windows电脑看epub小说,哪些阅读器软件更好用?
- 椭圆曲线密码算术(ECC)原理