使用httpPost发送 字节流请求 byte[]

本文详细介绍了如何使用HTTPPost方法发送字节流请求,包括准备工作、构建请求体、设置请求头和执行请求的过程。通过实例代码解析,帮助读者理解如何将byte[]数据转换为HTTP请求发送,并讨论了可能遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public  byte[] post(String url,byte[] bytes) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new ByteArrayEntity(bytes));
        httpPost.setHeader("Content-type", "application/octet-stream;charset=UTF-8");
        //这里是设置虚拟IP
        String remoteIp = (int) (Math.random() * 255 + 1)+"."+(int) (Math.random() * 255 + 1)+"."+(int) (Math.random() * 255 + 1)+"."+(int) (Math.random() * 255 + 1);
        httpPost.setHeader("X-Forwarded-For",remoteIp);
        CloseableHttpResponse httpResponse = HttpClients.createDefault().execute(httpPost);
        try {
            HttpEntity entityResponse = httpResponse.getEntity();
            int responseCode = httpResponse.getStatusLine().getStatusCode();
            int contentLength = (int) entityResponse.getContentLength();
//            OutputStream out  = new ByteArrayOutputStream(contentLength);
            if (contentLength <= 0)
                throw new IOException("No response");
            int total = 0;
            int len ;
            //respBuffer是一个缓存数组,缓存InputStream.read()的数据,由于可能一次取不全,所以分多次取,最后是-1时候不取了结束了
            byte[] respBuffer = new byte[contentLength];
            byte[] respBuffer1 = new byte[contentLength];
            while ((len = entityResponse.getContent().read(respBuffer)) != -1 ){
                for (int i=0;i<len;i++){
                    respBuffer1[total+i] = respBuffer[i];
                }
                total = total + len;
            }
//            System.out.println(entityResponse.getContent().read(respBuffer,0,contentLength));

            if (total != respBuffer.length)
                throw new IOException("Read response buffer error");
            return respBuffer1;
        } finally {
            httpResponse.close();
        }
    }

 

参考资源链接:[HttpClient发送POST请求:二进制/字节流实例](https://wenku.youkuaiyun.com/doc/6412b574be7fbd1778d4334d?utm_source=wenku_answer2doc_content) 在Java项目中,使用HttpClient来发送POST请求并处理二进制/字节流数据是一项常见的任务。为了帮助你掌握这一过程,推荐你参考《HttpClient发送POST请求:二进制/字节流实例》。这份资料详细解释了如何使用HttpClient 3.x版本来发送POST请求,并处理二进制数据和字节流。 首先,创建一个HttpClient实例,然后创建一个PostMethod对象来表示要发送POST请求。接下来,需要设置请求头中的Content-Type,以便服务器知道如何解析发送的数据。对于二进制数据,通常使用'application/octet-stream'作为内容类型。 然后,将字节数组byte[])作为请求发送。这可以通过设置ByteArrayRequestEntity来实现,它允许你将字节数组封装成HTTP请求的一部分。执行请求后,检查返回的状态码以确认请求成功。最后,从响应中读取输入,将其转换为字节数组,以便进一步处理或分析。 下面是一个简单的实例代码: ```*** ***mons.httpclient.HttpClient; ***mons.httpclient.methods.PostMethod; ***mons.httpclient.HttpException; ***mons.httpclient.methods.ByteArrayRequestEntity; ***mons.httpclient.methods.RequestEntity; import java.io.IOException; public class HttpPostExample { public static void main(String[] args) { String url = 参考资源链接:[HttpClient发送POST请求:二进制/字节流实例](https://wenku.youkuaiyun.com/doc/6412b574be7fbd1778d4334d?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值