import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.protocol.HTTP; import org.springframework.stereotype.Service; import org.springframework.util.DigestUtils; import java.nio.charset.StandardCharsets; import java.util.Map; /** * @author GaoWei * @date 2023/4/20 17:10 */ public class BaseEblService{ private static final String SIGN = "%sebl-api-method%sebl-appkey%sebl-timestamp%sebl-v%s%s"; private static final String URL_PARAMS = "?ebl-api-method=%s&ebl-appkey=%s&ebl-timestamp=%s&ebl-v=%s&ebl-sign=%s" + "&ebl-sign-method=%s&ebl-format=%s&ebl-customer-id=%s"; private HttpPost getHttpPost(String eblHost, String paraJsonStr, Map<String, String> header) { HttpPost httppost = new HttpPost(eblHost); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(120000).build(); httppost.setConfig(requestConfig); httppost.addHeader(HTTP.CONTENT_TYPE, "application/json"); if (header != null && header.size() > 0) { for (String key : header.keySet()) { httppost.addHeader(key, header.get(key)); } } StringEntity str = new StringEntity(paraJsonStr, "UTF-8"); httppost.setEntity(str); return httppost; } public static void main(String[] args) { String appkey = "83285869"; String appsecret = "3d359cbfb787401689629ebe6754c497"; String signMethod = "MD5"; String format = "json"; String version = "1.0"; String timestamp = String.valueOf(System.currentTimeMillis() / 1000); String signStr = String.format(SIGN, appsecret, "ebl.freeapi.2023050010", appkey, timestamp, version, appsecret); String eblSign = DigestUtils.md5DigestAsHex(signStr.getBytes(StandardCharsets.UTF_8)); System.out.println(String.format(URL_PARAMS, "ebl.freeapi.2023050010", appkey, timestamp, version, eblSign, signMethod, format, "JFYG-JFSJZT")); } }
时间: 2024-04-01 12:32:55 浏览: 14
这段代码是用 Java 语言编写的一个基础的 EBL 服务类,主要包括了对 HTTP POST 请求的封装和签名算法的实现。其中,`getHttpPost` 方法用于构建 HTTP POST 请求,并设置请求头和请求参数;`main` 方法用于生成 EBL API 的签名,并输出完整的请求 URL。该代码中使用了 `org.apache.http` 和 `org.springframework.util` 两个库。
相关问题
HttpPost如何设置超时时间
可以使用 `RequestConfig` 对象来设置 `HttpPost` 的超时时间。以下是示例代码:
```java
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class HttpClientExample {
public static void main(String[] args) {
// 创建 HttpClient 实例
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建 HttpPost 请求
HttpPost httpPost = new HttpPost("http://example.com/api");
// 设置请求头
httpPost.setHeader("Content-Type", "application/json");
// 设置请求体
String requestBody = "{\"key1\":\"value1\", \"key2\":\"value2\"}";
StringEntity requestEntity = new StringEntity(requestBody, "UTF-8");
httpPost.setEntity(requestEntity);
// 设置超时时间
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000) // 连接超时时间
.setSocketTimeout(5000) // 读取超时时间
.build();
httpPost.setConfig(requestConfig);
try {
// 发送请求并获取响应
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
// 处理响应
HttpEntity entity = response.getEntity();
if (entity != null) {
String responseString = EntityUtils.toString(entity, "UTF-8");
System.out.println(responseString);
}
} finally {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
在上面的示例代码中,通过 `RequestConfig` 对象设置了连接超时时间和读取超时时间,分别为 5000 毫秒。你可以根据实际需求调整超时时间的数值。
HttpPost怎么限制请求时间
可以使用HttpClient库中的RequestConfig类来限制请求时间。具体的做法如下:
1. 创建HttpClient对象
```java
CloseableHttpClient httpClient = HttpClients.createDefault();
```
2. 创建HttpPost对象并设置请求参数
```java
HttpPost httpPost = new HttpPost(url);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(timeout) // 设置读取超时时间
.setConnectTimeout(timeout) // 设置连接超时时间
.build();
httpPost.setConfig(requestConfig);
```
其中,timeout是超时时间,单位是毫秒。
3. 执行请求
```java
CloseableHttpResponse response = httpClient.execute(httpPost);
```
4. 处理响应
```java
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "utf-8");
```
完整代码示例:
```java
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class HttpPostExample {
public static void main(String[] args) throws Exception {
String url = "http://example.com/api/v1/login";
int timeout = 5000; // 超时时间为5秒
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(timeout)
.setConnectTimeout(timeout)
.build();
httpPost.setConfig(requestConfig);
// 设置请求体
String requestBody = "{\"username\":\"admin\",\"password\":\"123456\"}";
StringEntity requestEntity = new StringEntity(requestBody, "utf-8");
httpPost.setEntity(requestEntity);
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "utf-8");
System.out.println(result);
}
}
```