Innlegg med HttpClient

1. Oversikt

I denne veiledningen - vi POSTER med HttpClient 4 - bruker først autorisasjon, deretter det flytende HttpClient API.

Til slutt vil vi diskutere hvordan du laster opp en fil ved hjelp av Httpclient.

2. Grunnleggende POST

La oss først gå gjennom et enkelt eksempel og sende en POST-forespørsel ved hjelp av HttpClient.

Vi gjør en POST med to parametere - “brukernavn”Og”passord“:

@Test offentlig ugyldig nårSendPostRequestUsingHttpClient_thenCorrect () kaster ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = ny HttpPost ("// www.eksempel.com"); Liste params = ny ArrayList (); params.add (ny BasicNameValuePair ("brukernavn", "John")); params.add (ny BasicNameValuePair ("passord", "pass")); httpPost.setEntity (ny UrlEncodedFormEntity (params)); CloseableHttpResponse respons = client.execute (httpPost); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

Legg merke til hvordan vi brukte a Liste av NameValuePair for å inkludere parametere i POST-forespørselen.

3. POST med autorisasjon

Deretter, la oss se hvordan du gjør en POST med autentiseringslegitimasjon ved hjelp av HttpClient.

I det følgende eksemplet - vi sender en POST-forespørsel til en URL sikret med grunnleggende godkjenning ved å legge til en autorisasjonshode:

@Test offentlig ugyldig nårSendPostRequestWithAuthorizationUsingHttpClient_thenCorrect () kaster ClientProtocolException, IOException, AuthenticationException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = ny HttpPost ("// www.eksempel.com"); httpPost.setEntity (ny StringEntity ("testinnlegg")); UsernamePasswordCredentials creds = nytt brukernavnPasswordCredentials ("John", "pass"); httpPost.addHeader (ny BasicScheme (). autentisere (creds, httpPost, null)); CloseableHttpResponse respons = client.execute (httpPost); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

4. POST med JSON

Nå - la oss se hvordan du sender en POST-forespørsel med et JSON-organ ved hjelp av HttpClient.

I det følgende eksemplet - vi sender noen person informasjon (ID, navn) som JSON:

@Test offentlig ugyldig nårPostJsonUsingHttpClient_thenCorrect () kaster ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = ny HttpPost ("// www.eksempel.com"); String json = "{" id ": 1," name ":" John "}"; StringEntity entity = new StringEntity (json); httpPost.setEntity (enhet); httpPost.setHeader ("Godta", "application / json"); httpPost.setHeader ("Content-type", "application / json"); CloseableHttpResponse respons = client.execute (httpPost); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

Legg merke til hvordan vi bruker StringEntity for å angi forespørselens hoveddel.

Vi setter også inn Innholdstype topptekst til søknad / jsonfor å gi serveren den nødvendige informasjonen om representasjonen av innholdet vi sender.

5. POST Med HttpClient Flytende API

La oss deretter POSTE med HttpClient Flytende API.

Vi kommer til å sende en forespørsel med to parametere “brukernavn”Og”passord“:

@Test offentlig ugyldig nårPostFormUsingHttpClientFluentAPI_thenCorrect () kaster ClientProtocolException, IOException {HttpResponse respons = Request.Post ("// www.example.com"). BodyForm (Form.form (). Legg til ("brukernavn", "John"). Legg til. ("passord", "pass"). build ()) .execute (). returnResponse (); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); }

6. POST forespørsel om flere deler

La oss POSTE en forespørsel om flere deler.

Vi legger ut en Fil, brukernavn og passord ved hjelp av MultipartEntityBuilder:

@Test offentlig ugyldig nårSendMultipartRequestUsingHttpClient_thenCorrect () kaster ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = ny HttpPost ("// www.eksempel.com"); MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.addTextBody ("brukernavn", "John"); builder.addTextBody ("passord", "pass"); builder.addBinaryBody ("fil", ny fil ("test.txt"), ContentType.APPLICATION_OCTET_STREAM, "file.ext"); HttpEntity multipart = builder.build (); httpPost.setEntity (flerdelt); CloseableHttpResponse respons = client.execute (httpPost); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

7. Last opp en Fil Ved hjelp av HttpClient

La oss deretter se hvordan du laster opp en Fil bruker HttpClient.

Vi laster opp “test.txt”Fil ved hjelp av MultipartEntityBuilder:

@Test offentlig ugyldig nårUploadFileUsingHttpClient_thenCorrect () kaster ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = ny HttpPost ("// www.eksempel.com"); MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.addBinaryBody ("fil", ny fil ("test.txt"), ContentType.APPLICATION_OCTET_STREAM, "file.ext"); HttpEntity multipart = builder.build (); httpPost.setEntity (flerdelt); CloseableHttpResponse respons = client.execute (httpPost); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

8. Få Fil Laste oppFramgang

Til slutt - la oss se hvordan du får fremdriften av Fil last opp ved hjelp av HttpClient.

I det følgende eksemplet utvider vi HttpEntityWrapper for å få synlighet i opplastingsprosessen.

Først - her er opplastingsmetoden:

@Test offentlig ugyldig nårGetUploadFileProgressUsingHttpClient_thenCorrect () kaster ClientProtocolException, IOException {CloseableHttpClient client = HttpClients.createDefault (); HttpPost httpPost = ny HttpPost ("// www.eksempel.com"); MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.addBinaryBody ("fil", ny fil ("test.txt"), ContentType.APPLICATION_OCTET_STREAM, "file.ext"); HttpEntity multipart = builder.build (); ProgressEntityWrapper.ProgressListener pListener = prosent -> assertFalse (Float.compare (prosent, 100)> 0); httpPost.setEntity (ny ProgressEntityWrapper (flerdelt, pListener)); CloseableHttpResponse respons = client.execute (httpPost); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }

Vi legger også til grensesnittet ProgressListener som gjør det mulig å observere fremdriften for opplastingen:

offentlig statisk grensesnitt ProgressListener {void progress (float percentage); }

Og her er vår utvidede versjon av HttpEntityWrapper ProgressEntityWrapper“:

offentlig klasse ProgressEntityWrapper utvider HttpEntityWrapper {privat ProgressListener-lytter; offentlig ProgressEntityWrapper (HttpEntity-enhet, ProgressListener-lytter) {super (enhet); this.listener = lytter; } @ Override public void writeTo (OutputStream outstream) kaster IOException {super.writeTo (ny CountingOutputStream (outstream, lytter, getContentLength ())); }} 

Og den utvidede versjonen av FilterOutputStreamCountingOutputStream“:

offentlig statisk klasse CountingOutputStream utvider FilterOutputStream {privat ProgressListener-lytter; privat lang overført; private lange totalBytes; offentlig CountingOutputStream (OutputStream ut, ProgressListener lytter, lang totalBytes) {super (ut); this.listener = lytter; overført = 0; this.totalBytes = totalBytes; } @Override public void write (byte [] b, int off, int len) kaster IOException {out.write (b, off, len); overført + = len; listener.progress (getCurrentProgress ()); } @ Overstyr offentlig tomt skriv (int b) kaster IOException {out.write (b); overført ++; listener.progress (getCurrentProgress ()); } private float getCurrentProgress () {return ((float) overført / totalBytes) * 100; }}

Noter det:

  • Ved utvidelse FilterOutputStream til "CountingOutputStream ”- vi overstyrer skrive() metode for å telle de skrevne (overførte) byte
  • Ved utvidelse HttpEntityWrapper til "ProgressEntityWrapper ”- vi overstyrer skrive til() metode for å bruke vår “CountingOutputStream”

9. Konklusjon

I denne opplæringen illustrerte vi de vanligste måtene å sende POST HTTP-forespørsler med Apache HttpClient 4.

Vi lærte hvordan du sender en POST-forespørsel med autorisasjon, hvordan du legger ut ved hjelp av HttpClient flytende API og hvordan du laster opp en fil og sporer fremdriften.

Implementeringen av alle disse eksemplene og kodebiter finner du i github-prosjektet.


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