Java ApacheHttpClient 4.0。奇怪的行为

Java ApacheHttpClient 4.0。奇怪的行为,java,httpclient,Java,Httpclient,我正在使用ApacheHttpClient 4.0作为我的网络爬虫。我发现奇怪的行为是:我试图通过HTTPGET方法获取页面,并得到关于404HTTP错误的响应。但是,如果我尝试使用浏览器获取该页面,它将成功完成 详情: 1.我通过以下方式将多部分表单上载到服务器: HttpPost httpPost = new HttpPost("http://[host here]/in.php"); MultipartEntity entity = new MultipartEntity

我正在使用ApacheHttpClient 4.0作为我的网络爬虫。我发现奇怪的行为是:我试图通过HTTPGET方法获取页面,并得到关于404HTTP错误的响应。但是,如果我尝试使用浏览器获取该页面,它将成功完成

详情: 1.我通过以下方式将多部分表单上载到服务器:

    HttpPost httpPost = new HttpPost("http://[host here]/in.php");

    MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    entity.addPart("method", new StringBody("post"));
    entity.addPart("key", new StringBody("223fwe0923fjf23"));
    FileBody fileBody = new FileBody(new File("photo.jpg"), "image/jpeg");
    entity.addPart("file", fileBody);
    httpPost.setEntity(entity);

    HttpResponse response = httpClient.execute(httpPost);       
    HttpEntity result = response.getEntity();

    String responseString = "";
    if (result != null) {
        InputStream inputStream = result.getContent();

        byte[] buffer = new byte[1024];
        while(inputStream.read(buffer) > 0)
            responseString += new String(buffer);

        result.consumeContent();
    }
加载成功结束

我从web服务器获得了一些结果:

    HttpGet httpGet = new HttpGet("http://[host here]/res.php?key="+myKey+"&action=get&id="+id);

    HttpResponse response = httpClient.execute(httpGet);
    HttpEntity entity = response.getEntity();
我在执行方法运行时收到ClientProtocolException。我正在用log4j调试这种情况。找不到服务器应答404。但我的浏览器会毫无问题地加载该页面

有人能帮我吗


谢谢。

我必须指出,问题与web服务器无关。如果我没有将FileBody添加到多部分表单数据中,则不会发生异常,没有HTTP 404,一切正常。

您是否检查了浏览器是否返回缓存页面?log4j告诉我:DEBUG[org.apache.HTTP.wire]>>GET/res.php?key=sadf34f4f&action=GET&id=89122037[0x0][0x0][0x0]。。。。。最后有许多空值。这可能是个问题原因吗?如果是这样,我如何消除它?您是否尝试过从HTTP 1.1切换到1.0或以其他方式?我想我模模糊糊地记得,httpclient在某些服务器的通信方式上出现了一些问题,导致服务器返回404。看起来您的id变量中的值是假的。它的结尾真的包含空值吗?谢谢你的快速回答。否认,我刚刚尝试使用HTTP 1.0,但HTTP服务器根本没有响应。jitter,no,id变量不包含空值。它是一个像12341235这样的普通字符串。