Uverejňovanie pomocou HttpClient

1. Prehľad

V tomto návode - pošleme príspevok s HttpClient 4 - pomocou prvej autorizácie, potom plynulého rozhrania HttpClient API.

Na záver si povieme, ako nahrať súbor pomocou Httpclient.

2. Základný POST

Po prvé, poďme na jednoduchý príklad a pošleme požiadavku POST pomocou HttpClient.

Urobíme POST s dvoma parametrami - “používateľské meno“A„heslo“:

@Test public void whenSendPostRequestUsingHttpClient_thenCorrect () vyvolá ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = nový HttpPost ("// www.example.com"); Zoznam parametrov = new ArrayList (); params.add (new BasicNameValuePair ("používateľské meno", "John")); params.add (new BasicNameValuePair ("heslo", "heslo")); httpPost.setEntity (nový UrlEncodedFormEntity (parametre)); CloseableHttpResponse response = client.execute (httpPost); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

Všimnite si, ako sme použili a Zoznam z NameValuePair zahrnúť parametre do požiadavky POST.

3. POST s autorizáciou

Ďalej sa pozrime, ako urobiť POST s overovacími povereniami pomocou HttpClient.

V nasledujúcom príklade - pošleme požiadavku POST na adresu URL zabezpečenú základným overením pridaním hlavičky Autorizácia:

@Test public void whenSendPostRequestWithAuthorizationUsingHttpClient_thenCorrect () hodí ClientProtocolException, IOException, AuthenticationException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = nový HttpPost ("// www.example.com"); httpPost.setEntity (nový StringEntity ("testovací príspevok")); UsernamePasswordCredentials creds = nové UsernamePasswordCredentials ("John", "pass"); httpPost.addHeader (new BasicScheme (). authenticate (creds, httpPost, null)); CloseableHttpResponse response = client.execute (httpPost); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

4. POST S JSON

Teraz - pozrime sa, ako poslať požiadavku POST s telom JSON pomocou HttpClient.

V nasledujúcom príklade - niektoré posielame osoba informácie (id, meno) ako JSON:

@Test public void whenPostJsonUsingHttpClient_thenCorrect () vyvolá ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = nový HttpPost ("// www.example.com"); Reťazec json = "{" id ": 1," name ":" John "}"; StringEntity entity = new StringEntity (json); httpPost.setEntity (entita); httpPost.setHeader ("Prijať", "aplikácia / json"); httpPost.setHeader ("Content-type", "application / json"); CloseableHttpResponse response = client.execute (httpPost); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

Všimnite si, ako používame StringEntity na nastavenie tela žiadosti.

Nastavujeme tiež Druh obsahu hlavička do aplikácia / jsonaby sme serveru poskytli potrebné informácie o zastúpení obsahu, ktorý odosielame.

5. POST pomocou HttpClient Fluent API

Ďalej POŠŤUJEME pomocou HttpClient Plynulé API.

Pošleme požiadavku s dvoma parametrami “používateľské meno“A„heslo“:

@Test public void whenPostFormUsingHttpClientFluentAPI_thenCorrect () vyvolá ClientProtocolException, IOException {HttpResponse response = Request.Post ("// www.example.com"). BodyForm (Form.form (). Add ("username", "John"). Add ("heslo", "prejsť"). build ()) .execute (). returnResponse (); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

6. POST požiadavka na viac častí

Poďme teraz POŠTOVAŤ požiadavku na viac častí.

Zverejníme a Súbor, používateľské meno a heslo pomocou MultipartEntityBuilder:

@ Test public void whenSendMultipartRequestUsingHttpClient_thenCorrect () hodí ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = nový HttpPost ("// www.example.com"); MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.addTextBody ("používateľské meno", "John"); builder.addTextBody ("heslo", "heslo"); builder.addBinaryBody ("súbor", nový súbor ("test.txt"), ContentType.APPLICATION_OCTET_STREAM, "súbor.ext"); HttpEntity multipart = builder.build (); httpPost.setEntity (viacdielne); CloseableHttpResponse response = client.execute (httpPost); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

7. Odovzdajte a Súbor Použitím HttpClient

Ďalej sa pozrime, ako nahrať a Súbor pomocou HttpClient.

Nahráme „test.txt”Súbor pomocou MultipartEntityBuilder:

@ Test public void whenUploadFileUsingHttpClient_thenCorrect () vyvolá ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = nový HttpPost ("// www.example.com"); MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.addBinaryBody ("súbor", nový súbor ("test.txt"), ContentType.APPLICATION_OCTET_STREAM, "súbor.ext"); HttpEntity multipart = builder.build (); httpPost.setEntity (viacdielne); CloseableHttpResponse response = client.execute (httpPost); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

8. Získajte Súbor NahraťPokrok

Nakoniec - pozrime sa, ako dosiahnuť pokrok Súbor nahrať pomocou HttpClient.

V nasledujúcom príklade rozšírime HttpEntityWrapper na zviditeľnenie procesu nahrávania.

Najprv - tu je metóda nahrávania:

@ Test public void whenGetUploadFileProgressUsingHttpClient_thenCorrect () hodí ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = nový HttpPost ("// www.example.com"); MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.addBinaryBody ("súbor", nový súbor ("test.txt"), ContentType.APPLICATION_OCTET_STREAM, "súbor.ext"); HttpEntity multipart = builder.build (); ProgressEntityWrapper.ProgressListener pListener = percento -> assertFalse (Float.compare (percento, 100)> 0); httpPost.setEntity (nový ProgressEntityWrapper (viacdielny, pListener)); CloseableHttpResponse response = client.execute (httpPost); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

Pridáme aj rozhranie ProgressListener ktorý nám umožňuje sledovať priebeh nahrávania:

verejné statické rozhranie ProgressListener {void progress (float percent); }

A tu je naša rozšírená verzia aplikácie HttpEntityWrapper ProgressEntityWrapper“:

verejná trieda ProgressEntityWrapper rozširuje HttpEntityWrapper {súkromný poslucháč ProgressListener; public ProgressEntityWrapper (entita HttpEntity, poslucháč ProgressListener) {super (entita); this.listener = poslucháč; } @Override public void writeTo (OutputStream outstream) hodí IOException {super.writeTo (new CountingOutputStream (outstream, listener, getContentLength ())); }} 

A rozšírená verzia FilterOutputStreamCountingOutputStream“:

verejná statická trieda CountingOutputStream rozširuje FilterOutputStream {súkromný poslucháč ProgressListener; súkromné ​​dlho prevedené; private long totalBytes; public CountingOutputStream (OutputStream out, poslucháč ProgressListener, dlhé totalBytes) {super (out); this.listener = poslucháč; prenesene = 0; this.totalBytes = totalBytes; } @Override public void write (byte [] b, int off, int len) vyvolá IOException {out.write (b, off, len); prenesene + = len; listener.progress (getCurrentProgress ()); } @Override public void write (int b) hodí IOException {out.write (b); prenesene ++; listener.progress (getCurrentProgress ()); } súkromný plavák getCurrentProgress () {návrat ((plavák) prenesený / totalBytes) * 100; }}

Poznač si to:

  • Pri predlžovaní FilterOutputStream CountingOutputStream ”- prekonávame napíš () metóda na spočítanie zapísaných (prenesených) bajtov
  • Pri predlžovaní HttpEntityWrapper ProgressEntityWrapper ”- prekonávame Písať() spôsob použitia našej „CountingOutputStream“

9. Záver

V tomto výučbe sme ilustrovali najbežnejšie spôsoby odosielania POST HTTP požiadaviek pomocou Apache HttpClient 4.

Naučili sme sa, ako poslať požiadavku POST s autorizáciou, ako zverejňovať pomocou HttpClient plynulé API a ako nahrať súbor a sledovať jeho priebeh.

Implementáciu všetkých týchto príkladov a útržkov kódu nájdete v projekte github.


$config[zx-auto] not found$config[zx-overlay] not found