HttpClient Post 二进制/字节流/byte[]

时间:2023-01-11 17:08:43

HttpClient 3.x

public class HttpHelper {
    String m_url;
    HttpClient m_HttpClient;

    public HttpHelper(String url) {
        m_url = url;
        m_HttpClient = new HttpClient();
    }

    public byte[] post(byte[] bytes, String contentType) throws IOException {
        PostMethod method = new PostMethod(m_url);

        if ((contentType != null) && (contentType.length() > 0))
            method.setRequestHeader("Content-type" , contentType);
        method.setRequestEntity(new ByteArrayRequestEntity(bytes));
        int HttpCode = m_HttpClient.executeMethod(method);
        if (HttpCode != HttpStatus.SC_OK)
            throw new IOException("Invalid HttpStatus: " + HttpCode);
        InputStream respStream = method.getResponseBodyAsStream();
        int respBodySize = respStream.available();
        if (respBodySize <= 0)
            throw new IOException("Invalid respBodySize: " + respBodySize);
        byte[] respBuffer = new byte[respBodySize];
        if (respStream.read(respBuffer) != respBodySize)
            throw new IOException("Read respBody Error");
        return respBuffer;
    }

    public String postXml(String str) throws IOException {
        byte[] reqBuffer = str.getBytes(Charset.forName("UTF-8"));
        byte[] respBuffer = post(reqBuffer, "application/xml; charset=UTF-8");
        String resp = new String(respBuffer, Charset.forName("UTF-8"));
        return resp;
    }
}



HttpClient 4.x

public class HttpHelper {
    CloseableHttpClient m_HttpClient;

    public HttpHelper() {
        m_HttpClient = HttpClients.createDefault();
    }

    // send bytes and recv bytes
    public byte[] post(String url, byte[] bytes, String contentType) throws IOException {
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new ByteArrayEntity(bytes));
        if (contentType != null)
            httpPost.setHeader("Content-type", contentType);
        CloseableHttpResponse httpResponse = m_HttpClient.execute(httpPost);
        try {
            HttpEntity entityResponse = httpResponse.getEntity();
            int contentLength = (int) entityResponse.getContentLength();
            if (contentLength <= 0)
                throw new IOException("No response");
            byte[] respBuffer = new byte[contentLength];
            if (entityResponse.getContent().read(respBuffer) != respBuffer.length)
                throw new IOException("Read response buffer error");
            return respBuffer;
        } finally {
            httpResponse.close();
        }
    }

    public byte[] post(String url, byte[] bytes) throws IOException {
        return post(url, bytes, null);
    }

    public String postXml(String url, String str) throws IOException {
        byte[] reqBuffer = str.getBytes(Charset.forName("UTF-8"));
        byte[] respBuffer = post(url, reqBuffer, "application/xml; charset=UTF-8");
        String resp = new String(respBuffer, Charset.forName("UTF-8"));
        return resp;
    }
}