You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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();
        }
    }
}

关键点说明

  1. Basic认证处理:curl的-u参数对应HTTP Basic认证,代码中用BasicScheme自动生成认证头,比手动拼接Authorization头更规范。
  2. 二进制数据内容:--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);
    
  3. 依赖提示:确保你的项目中引入了Apache HttpClient的依赖,比如Maven:
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.14</version>
    </dependency>
    

内容的提问来源于stack exchange,提问作者Nick Dong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:57:21