用 Java 實現 HTTP Post
在本教程中,我們將討論如何使用 Java 中的不同方法傳送 HTTP POST
請求。HTTP 的請求方法有幾種,POST
就是其中之一。
POST
用於向伺服器傳送一些資料。我們將使用網站 https://postman-echo.com
來測試我們的示例資料。
在 Java 中使用 HttpURLConnection
的 HTTP 釋出
第一個示例使用 HttpURLConnection
類,該類使用各種功能擴充套件 URLConnection
抽象類來執行網路操作。
在程式中,我們建立一個 URL
的物件 dummyUrl
並傳遞我們使用的端點 https://postman-echo.com/post
。當我們傳送一個 post 請求時,我們會傳送一些資料。
dummyData
儲存資料,其中 firstname
和 lastname
作為鍵,john
和 doe
作為它們的值,兩個鍵值對都附加了 &
符號。
現在,我們呼叫 URL
類的 openConnection()
方法,該方法返回一個 URLConnection
物件,我們可以將其轉換並儲存為 HttpURLConnection
型別的物件。
要設定 request
方法,我們呼叫 setRequestMethod()
函式並傳遞請求型別。如果我們想將資料傳送到 API,我們需要啟用 doOutput
欄位以啟用輸出連線。
下一步是使用接受鍵和值作為其引數的 setRequestProperty()
函式設定請求屬性。
第一個請求屬性是 Content-Type,指定我們要傳送的內容型別,第二個屬性告訴要使用的字符集,最後一個屬性告訴釋出資料的 Content-Length。
要獲取響應資料,我們需要使用 getOutputStream()
函式從 httpUrlConnection
獲取輸出流,並將其作為 DataOutputStream
建構函式的引數傳遞。
這將返回一個 DataOutputStream
物件。我們使用 writeBytes()
方法寫入 dataOutputStream
的資料。
接下來,我們使用 getInputStream()
函式獲取輸入流,並在 InputStreamReader()
中使用它來獲取 BufferedReader
物件。
為了從流中讀取資料,我們建立了一個迴圈並從 BufferedReader
讀取每一行並將其輸出到控制檯上。
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
class ExampleClass1 {
public static void main(String[] args) throws MalformedURLException {
URL dummyUrl = new URL("https://postman-echo.com/post");
String dummyData = "firstname=john&lastname=doe";
try {
HttpURLConnection httpUrlConnection = (HttpURLConnection) dummyUrl.openConnection();
httpUrlConnection.setRequestMethod("POST");
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpUrlConnection.setRequestProperty("charset", "utf-8");
httpUrlConnection.setRequestProperty("Content-Length", Integer.toString(dummyData.length()));
DataOutputStream dataOutputStream = new DataOutputStream(httpUrlConnection.getOutputStream());
dataOutputStream.writeBytes(dummyData);
InputStream inputStream = httpUrlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String stringLine;
while ((stringLine = bufferedReader.readLine()) != null) {
System.out.println(stringLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
輸出:
{"args":{},"data":"","files":{},"form":{"firstname":"john","lastname":"doe"},"headers":{"x-forwarded-proto":"https","x-forwarded-port":"443","host":"postman-echo.com","x-amzn-trace-id":"Root=1-6204df8b-078f0e863f06000030e99563","content-length":"27","content-type":"application/x-www-form-urlencoded","charset":"utf-8","user-agent":"Java/15.0.1","accept":"text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2"},"json":{"firstname":"john","lastname":"doe"},"url":"https://postman-echo.com/post"}
在 Java 中使用 Apache HttpClient
的 HTTP 釋出
在本教程的這一部分中,我們將使用外部庫來傳送 HTTP 釋出請求。我們使用以下 maven 依賴項匯入 Apache 庫。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
HttpClient
是一組有助於執行 HTTP 操作的方法。
在下面的程式碼中,我們呼叫 HttpClients
的 createDefault()
方法來構建返回 CloseableHttpClient
物件的建立 HttpClientBuilder
。
我們需要設定 URI 和引數以與 post 請求一起傳送。為此,我們呼叫 RequestBuilder.post()
並使用 setURI()
設定 URI。
然後兩個引數使用帶有鍵和值的 addParameter()
函式。
我們使用 closeableHttpClient
物件呼叫 execute()
函式,並將 httpUriRequest
作為其返回 CloseableHttpResponse
物件的引數。
現在我們呼叫 getEntity()
函式從 closeableHttpClientResponse
獲取 HttpEntity
並使用 EntityUtils.toString()
將其轉換為字串。
接下來,我們列印來自 closeableHttpClientResponse
的響應。
import java.io.*;
import java.net.*;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
class ExampleClass1 {
public static void main(String[] args) {
CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
try {
URI dummyUri = new URI("https://postman-echo.com/post");
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(dummyUri)
.addParameter("firstname", "Dwayne")
.addParameter("lastname", "Johnson")
.build();
CloseableHttpResponse closeableHttpClientResponse =
closeableHttpClient.execute(httpUriRequest);
String getResponse = EntityUtils.toString(closeableHttpClientResponse.getEntity());
System.out.println(getResponse);
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
} finally {
try {
closeableHttpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
輸出:
{"args":{},"data":"","files":{},"form":{"firstname":"Dwayne","lastname":"Johnson"},"headers":{"x-forwarded-proto":"https","x-forwarded-port":"443","host":"postman-echo.com","x-amzn-trace-id":"Root=1-6204eaa0-7444d40757db202e2815744d","content-length":"33","content-type":"application/x-www-form-urlencoded; charset=UTF-8","user-agent":"Apache-HttpClient/4.5.13 (Java/15.0.1)","accept-encoding":"gzip,deflate"},"json":{"firstname":"Dwayne","lastname":"Johnson"},"url":"https://postman-echo.com/post"}
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn