1.概述

在本教程中-我们会用HttpClient4.—首先使用授权,然后使用流畅的HttpClient API。

最后,我们将讨论如何使用Httpclient上传文件。

进一步阅读:

高级的HttpClient配置

高级用例的HttpClient配置。

HttpClient 4 -发送自定义Cookie

如何使用Apache HttpClient 4发送自定义cookie。

httpclient with ssl.

如何使用SSL配置HttpClient的示例。

2.基本的职位

首先,让我们看一个简单的示例,并使用HttpClient

我们会用两个参数做一个帖子 - “用户名“ 和 ”密码”:

@test public void whensendpostrequestusinghttpclient_thengorrect()抛出client procolocolexception,ioException {closeablehttpclient client = httpclients.createdefault();HttpPost HttpPost = new HttpPost(“http://www.example.com”);列表 params = new arraylist ();params.add(new basicnamevaluepair(“用户名”,“John”));params.add(new basicnamevaluepair(“密码”,“通过”));httppost.setentity(新的UrlencodedFormentity(Params));CloseableHttpResponse response = client.execute(httpPost);为了(response.getStatusLine () .getStatusCode(),等于(200);client.close ();}

注意我们如何使用列表namevaluepair.在POST请求中包含参数。

3.文章与授权

接下来,让我们看看如何使用HttpClient

在下面的例子中——我们通过添加一个Authorization头向一个带有基本认证的URL发送一个POST请求:

@test public void whensendpostrequestwithauthorizationusinghttpclient_thencorrect()抛出client procolocolexception,ioException,authenticationException {closeablehttpclient client = httpclient.createdefault();HttpPost HttpPost = new HttpPost(“http://www.example.com”);httppost.setentity(新的Strowingity(“测试帖子”));UsernamePasswordCredentials Creds =新的UsernamePasswordCreenentials(“John”,“Pass”);httppost.addheader(新的基础知识()。身份验证(信誉,httppost,null));CloseableHttpResponse response = client.execute(httpPost);为了(response.getStatusLine () .getStatusCode(),等于(200);client.close ();}

4.后用JSON

现在,让我们看看如何使用JSON体发送POST请求HttpClient

在下面的例子中-我们正在发送一些信息(id、名称)作为JSON:

@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 = new StringEntity(json);httpPost.setEntity(实体);httpPost。setHeader(“接受”、“application / json”);httpPost。setHeader(“内容类型”、“application / json”);CloseableHttpResponse response = client.execute(httpPost); assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); client.close(); }

注意我们是如何使用的严格设置请求的正文。

我们也在设置内容类型头来应用/ JSON.向服务器提供有关所发送内容表示的必要信息。金宝搏官网188be

5.张贴HttpClient API流利

接下来,让我们发布HttpClient流利的API。

我们将发送一个带有两个参数的请求用户名“ 和 ”密码”:

@Test公共void whentPostFormusinghttpclientfluentapi_thencorrect()抛出client procolocolexception,ioException {httpresponse response = request.post(“http://www.example.com”).bodyform(form.form()。添加(“用户名”,“John”).add(“密码”,“pass”)。build()).execute()。returnresponse();为了(response.getStatusLine () .getStatusCode(),等于(200);}

6.文章多部分请求

现在,让我们发布一个多部分请求。

我们会发布A.文件,用户名和密码使用MultipartentityBuilder

@test公共void whensendmultipartrequeStusinghttpclient_thencorrect()抛出client procolocolexception,ioException {closeablehttpclient client = httpclient.createdefault();HttpPost HttpPost = new HttpPost(“http://www.example.com”);MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addtextbody(“用户名”,“约翰”);builder.addtextbody(“密码”,“通过”);builder.addbinarybody(“文件”,新文件(“test.txt”),contentType.application_octet_stream,“file.ext”);HttpEntity multipart = builder.build();httpPost.setEntity(扇形);CloseableHttpResponse response = client.execute(httpPost);为了(response.getStatusLine () .getStatusCode(),等于(200); client.close(); }

7.上传文件使用HttpClient

接下来,让我们看看如何上传a文件使用HttpClient。

我们会上传用法“文件使用MultipartentityBuilder

@Test public void whenuploadfileuseinghttpclient_thencorrect () throws ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault();HttpPost HttpPost = new HttpPost(“http://www.example.com”);MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addbinarybody(“文件”,新文件(“test.txt”),contentType.application_octet_stream,“file.ext”);HttpEntity multipart = builder.build();httpPost.setEntity(扇形);CloseableHttpResponse response = client.execute(httpPost);为了(response.getStatusLine () .getStatusCode(),等于(200);client.close ();}

8.得到文件上传进步

最后,让我们看看如何取得进展文件上传使用HttpClient

在以下示例中,我们将延长httpentitywrapper.可以看到上传过程。

首先-这是上传方法:

@test public vod whongetuploadfileprogressusinghttpclient_thengorrect()抛出client procolocolexception,ioException {closeablehttpclient client = httpclients.createdefault();HttpPost HttpPost = new HttpPost(“http://www.example.com”);MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addbinarybody(“文件”,新文件(“test.txt”),contentType.application_octet_stream,“file.ext”);HttpEntity multipart = builder.build();progrestionitywrapper.progressListener plistener =百分比 - > assertfalse(float.compare(百分比,100)> 0);httppost.setentity(新的ProgressientityWrapper(MultiPart,Plistener));CloseableHttpResponse response = client.execute(httpPost);为了(response.getStatusLine () .getStatusCode(),等于(200);client.close (); }

我们还将添加接口ProgressListener这样我们就能观察到上传的进度:

公共静态接口ProgressListener {void进度(浮动百分比);}

这是我们的扩展版本httpentitywrapper.progressientitywrapper.”:

public class progresstywrapper extends HttpEntityWrapper {private ProgressListener监听器;public ProgressEntityWrapper(HttpEntity实体,ProgressListener监听器){super(实体);这一点。侦听器=侦听器;} public void writeTo(OutputStream outstream) throws IOException;/ /输出流:new CountingOutputStream(outstream, listener, getContentLength());}}

和扩展版本filteroutputstream.countingOutputStream.”:

public static class CountingOutputStream extends FilterOutputStream {private ProgressListener监听器;私人长转移;私人长totalBytes;public CountingOutputStream(OutputStream out, ProgressListener listener, long totalBytes) {super(out);这一点。侦听器=侦听器;转移= 0;这一点。totalBytes = totalBytes;} public void write(byte[] b, int off, int len) throws IOException {out。写(b, len); transferred += len; listener.progress(getCurrentProgress()); } @Override public void write(int b) throws IOException { out.write(b); transferred++; listener.progress(getCurrentProgress()); } private float getCurrentProgress() { return ((float) transferred / totalBytes) * 100; } }

注意:

  • 当扩展filteroutputstream.countingOutputStream“ -我们推翻了write ()计算写入(转移)字节的方法
  • 当扩展httpentitywrapper.ProgressEntityWrapper”- - -我们推翻了写给()使用我们的“countingoutputstream”

9.结论

在本教程中,我们演示了发送POST HTTP请求的最常见方法Apache httpclient 4.

我们学习了如何用授权发送发布请求,如何发布HttpClientFluent API以及如何上传文件并跟踪其进度。

所有这些示例和代码片段的实现可以在github项目

通用底部

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>查看课程
11.注释
最老的
最新
内联反馈
查看所有评论
评论在本文上关闭!