2009-11-04 64 views
1

我爲我的網絡爬蟲使用Apache HttpClient 4.0。我發現奇怪的行爲是:我試圖通過HTTP GET方法獲取頁面並獲得有關404 HTTP錯誤的響應。但是,如果我嘗試使用瀏覽器獲取該頁面,則會成功完成。Apache HttpClient 4.0。奇怪的行爲

詳細說明: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(); 
    } 

Uppload succefully結束。

  • 我收到從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未找到」。但我的瀏覽器加載我的網頁沒有問題。

    任何人都可以幫助我嗎?

    謝謝。

    +0

    您是否檢查過您的瀏覽器是否正在返回緩存頁面? – toolkit 2009-11-04 19:27:58

    +0

    log4j告訴這個: DEBUG [org.apache.http.wire] >>「GET /res.php?key=sadf3f3f34f4f43f4f&action=get&id=89122037[0x0][0x0][0x0][0x0] .....如果是這樣,我該如何消除它? – 2009-11-04 19:28:11

    +0

    你是否嘗試從HTTP 1.1切換到1.0或其他方式?我想我隱約記得httpclient有一些問題與一些服務器(如何通信),導致服務器返回404. – 2009-11-04 19:41:13

    回答

    0

    我要注意的問題是不關心網絡服務器。如果我不添加FileBody到多部分表單數據,異常不會發生,一切順利,沒有HTTP 404.