java 以 post请求方式 在请求Header中添加app_key为xxx ,timestamps为xxx ,random为xxx,sign为xxx,请求参数以form形式传输grant_type为xxx,client_id为xxx
时间: 2023-10-29 18:19:13 浏览: 28
可以使用以下代码以 POST 方式发送请求,并在请求头中添加指定的参数:
```java
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class PostWithHeader {
public static void main(String[] args) {
try {
// 定义 URL
URL url = new URL("http://example.com/api/token");
// 设置 URL 连接
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
// 定义请求头
connection.setRequestProperty("app_key", "xxx");
long timestamp = System.currentTimeMillis() / 1000;
connection.setRequestProperty("timestamps", String.valueOf(timestamp));
int random = (int)(Math.random() * 10000);
connection.setRequestProperty("random", String.valueOf(random));
String sign = generateSign("xxx", timestamp, random);
connection.setRequestProperty("sign", sign);
// 定义请求参数
String data = URLEncoder.encode("grant_type", "UTF-8") + "=" + URLEncoder.encode("xxx", "UTF-8");
data += "&" + URLEncoder.encode("client_id", "UTF-8") + "=" + URLEncoder.encode("xxx", "UTF-8");
// 发送请求
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write(data);
writer.flush();
// 获取响应
// ...
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 生成签名
private static String generateSign(String appSecret, long timestamp, int random) throws NoSuchAlgorithmException {
String str = appSecret + timestamp + random;
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(str.getBytes());
byte[] digest = md.digest();
return Base64.getEncoder().encodeToString(digest);
}
}
```
在上面的代码中,我们首先定义了一个 URL 对象,然后通过它的 `openConnection()` 方法获取连接对象。设置连接对象的 `doOutput` 属性为 `true`,表示我们将向服务器发送数据。
接下来,我们定义了请求头,并将其添加到连接对象中。其中,我们通过 `System.currentTimeMillis()` 方法获取当前时间戳(精确到秒),并生成一个随机数作为 `random` 参数。然后,我们调用 `generateSign()` 方法生成签名,并将其添加到请求头中。
最后,我们定义了请求参数,并将其写入连接对象的输出流中,最后关闭输出流。这样就可以发送 POST 请求了。