通过HttpClient / HttpPost和InputStreamBody将Java Applet HttpPost发送到apache

时间:2012-10-12 23:39:39

标签: java applet apache2 apache-httpclient-4.x

程序是一个小程序,旨在获取一些文件,处理它们,通过ZipOutputStream发送它们,并将(通常相当大的)zip文件上传到服务器。它使用Apache HttpClient 4.2.1(和辅助库)。我的帖子请求是在特权空间中执行的。我遇到的问题是Apache / 2.2.16(Win32)拒绝接受请求。我在Apache错误日志中收到错误,“chunked Transfer-Encoding forbidden”。

如果我使用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();
    }

据我所知,Apache 2.2应该接受分块数据。我没有看到任何拒绝它的开关。它似乎接受HTTP / 1.1连接。我不知道为什么它只是拒绝我尝试的任何东西。

0 个答案:

没有答案