用 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