通过HttpClient/HttpPost和InputStreamBody将Java小程序HttpPost发送到apache

通过HttpClient/HttpPost和InputStreamBody将Java小程序HttpPost发送到apache,java,applet,apache2,apache-httpclient-4.x,Java,Applet,Apache2,Apache Httpclient 4.x,这个程序是一个小程序,设计用来获取一些文件,处理它们,通过ZipOutStream发送它们,然后将通常相当大的zip文件上传到服务器。它使用ApacheHttpClient 4.2.1和辅助库。我的post请求正在特权空间中执行。我遇到的问题是Apache/2.2.16 Win32拒绝接受请求。我在Apache错误日志中发现一个错误,禁止分块传输编码 如果我使用wireshark捕获连接,请求如下所示: POST /data/FileUpload.php?userId=21 HTTP/1.1 T

这个程序是一个小程序,设计用来获取一些文件,处理它们,通过ZipOutStream发送它们,然后将通常相当大的zip文件上传到服务器。它使用ApacheHttpClient 4.2.1和辅助库。我的post请求正在特权空间中执行。我遇到的问题是Apache/2.2.16 Win32拒绝接受请求。我在Apache错误日志中发现一个错误,禁止分块传输编码

如果我使用wireshark捕获连接,请求如下所示:

POST /data/FileUpload.php?userId=21 HTTP/1.1
Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=PjgV56PRG1T0eeWZNfM3Gumc8v0p8j
Host: 192.168.2.16:8000
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.2.1 (java 1.5)
10be

--PjgV56PRG1T0eeWZNfM3Gumc8v0p8j
Content-Disposition: form-data; name="ZipFile"; filename="JavaUploaderZipStream.zip"
Content-Type: application/zip
Content-Transfer-Encoding: binary
执行此请求的代码是:

    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpClient httpclient = new DefaultHttpClient(params);

    HttpPost httpPost = new HttpPost(url);
    ZipCompressionInputStream zipStream = new ZipCompressionInputStream(fileList);

    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.STRICT);
    InputStreamBody uploadPart = new InputStreamBody(zipStream, "application/zip", "JavaUploaderZipStream.zip");
    reqEntity.addPart("ZipFile", uploadPart);
    httpPost.setEntity(reqEntity);

    HttpResponse response = httpclient.execute(httpPost);
    try {
        HttpEntity responseEntity = response.getEntity();
        EntityUtils.consume(responseEntity);
    } finally {
        httpPost.releaseConnection();
    }

据我所知,Apache2.2应该接受分块数据。我没有看到任何拒绝它的开关。它似乎正在接受HTTP/1.1连接。我不明白为什么它会拒绝我尝试的任何东西。

您必须提供一些Apache配置数据,而且您可能问错了地方。试试serverfault.com。