如何用Java的HttpPost发送空二进制数据?
实现对应curl命令的Java HTTP POST请求
你需要实现的curl命令为:
curl $CURL_OPTS -X POST --data-binary {} -s -K <(cat <<< "-u micromdm:$API_TOKEN") "$SERVER_URL/$endpoint"
这个命令核心是发送内容为{}的二进制数据,同时携带Basic认证信息。下面是可行的Java代码示例(基于Apache HttpClient):
对应curl行为的完整代码
import org.apache.http.HttpResponse; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class PostBinaryDataExample { public static void main(String[] args) { // 替换为你的实际配置 String serverUrl = "https://your-server.com"; String endpoint = "your/endpoint/path"; String apiToken = "your-api-token-here"; String fullUrl = serverUrl + "/" + endpoint; try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(fullUrl); // 设置请求头 httpPost.addHeader("Accept", "application/json;charset=utf-8"); httpPost.addHeader("Content-Type", "application/json;charset=utf-8"); // 处理Basic认证(对应curl的-u参数) UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("micromdm", apiToken); httpPost.addHeader(new BasicScheme().authenticate(credentials, httpPost, null)); // 对应--data-binary {},发送JSON空对象的二进制数据 byte[] binaryContent = "{}".getBytes("UTF-8"); ByteArrayEntity entity = new ByteArrayEntity(binaryContent); httpPost.setEntity(entity); // 执行请求 HttpResponse response = httpClient.execute(httpPost); // 可添加响应处理逻辑,比如打印状态码 System.out.println("响应状态码:" + response.getStatusLine().getStatusCode()); } catch (Exception e) { e.printStackTrace(); } } }
关键点说明
- Basic认证处理:curl的
-u参数对应HTTP Basic认证,代码中用BasicScheme自动生成认证头,比手动拼接Authorization头更规范。 - 二进制数据内容:
--data-binary {}实际发送的是UTF-8编码的{}字节数组,并非完全空的二进制数据。如果需要发送完全无内容的请求(对应curl --data-binary ''),可以替换Entity部分:// 发送空二进制数据(Content-Length为0) ByteArrayEntity emptyEntity = new ByteArrayEntity(new byte[0]); httpPost.setEntity(emptyEntity, org.apache.http.entity.ContentType.DEFAULT_BINARY); - 依赖提示:确保你的项目中引入了Apache HttpClient的依赖,比如Maven:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> </dependency>
内容的提问来源于stack exchange,提问作者Nick Dong
相关产品推荐
相关产品推荐

