2012-03-09 82 views
-1

我使用netbeans作爲IDE給你一個背景的指示。Apache httpclient:教程壞了 - 如何實際使用這個庫?

我正在玩Apache Apache httpclient庫,就像我當前的應用程序一樣,我在構建java HTTP連接時遇到了問題。

我聽說apache庫更強大。

無論如何,附帶的Apache網站的HttpClient庫教程文件似乎是有缺陷的:

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet("http://localhost/"); 
HttpResponse response = httpclient.execute(httpget); 

淨豆給了我這個代碼段(從教程直複製)的問題。忘記本地主機的連起碼的URI,與此出現的問題是:

  1. 的NetBeans抱怨的HttpClient和DefaultHttpClient是不兼容的類型。我可以解決這個看到的唯一方法是與投:

    (HttpClient) new DefaultHttpClient(); 
    
  2. Netbeans的抱怨說,因爲「HTTPGET」這裏是一個簡單的方法,而不是一個「HttpUriRequest」的httpclient.execute()將拋出一個錯誤。

如何簡單的3行教程如此錯誤,如果在這個例子中有太多的缺陷,我將如何成功地完成請求?

我迷路了,有人可以幫忙。似乎有幾種不同的方式,所有這些都不是我要找的。

我希望能夠在String中的應用中獲取格式正確的URL,然後關注所有重定向。我對這個迴應的內容不感興趣,僅僅是它會下降的cookies。

感謝,

格雷戈裏

+0

取決於您是否使用HttpClient 3.x或HttpClient 4.x?兩者都不兼容。 – 2012-03-09 08:29:38

+0

4.x從http://hc.apache.org/下載並從http://hc.apache.org/httpcomponents-client-ga/tutorial/pdf/httpclient-tutorial.pdf下面的教程 – ortonomy 2012-03-09 08:44:53

+0

什麼是錯誤拋出? – 2012-03-09 08:50:17

回答

1

我建議看你的進口。我認爲NetBeans導入了您的HttpClient 3.x而不是4.x.嘗試更正您的導入。

+0

好的,我在下載中找到了一些示例類文件。 你會發現這個有趣的 - 在它說的評論:@since 4.0,並提供此方法來實現連接: 'DefaultHttpClient client1 = new DefaultHttpClient(); HttpHost target = new HttpHost(「www.google.com」,80,「http」); HttpGet req = new HttpGet(「/」); HttpResponse rsp = client1.execute(target,req);' – ortonomy 2012-03-09 09:34:29

+0

但是,這段代碼仍然不起作用。 Netbeans仍然抱怨它找不到符號 - 因爲DefaultHttpClient沒有「執行」方法。我認爲你是正確的導入,但我使用的JAR文件,所以我有我需要的所有文件 - 他們都在課堂路徑。你認爲我可能會錯過依賴關係嗎? – ortonomy 2012-03-09 09:38:01

+0

好吧,我放棄了。 Netbeans不會讓它運行,但是我嘗試導入這些文件。我發現一些傢伙Maven項目,它似乎工作,但我不知道如何使用maven或將他所做的工作轉移到我的項目。這似乎已經枯竭了。無論如何,我想你的回答是正確的。感謝您的努力... – ortonomy 2012-03-09 13:45:36

0

您是否嘗試過使用此代碼,他們似乎比您做不同的機制。採取從here。這是爲了3.X版本,但可能是因爲你使用的是不同的版本。

import org.apache.commons.httpclient.*; 
import org.apache.commons.httpclient.methods.*; 
import org.apache.commons.httpclient.params.HttpMethodParams; 

import java.io.*; 

public class HttpClientTutorial { 

    private static String url = "http://www.apache.org/"; 

    public static void main(String[] args) { 
    // Create an instance of HttpClient. 
    HttpClient client = new HttpClient(); 

    // Create a method instance. 
    GetMethod method = new GetMethod(url); 

    // Provide custom retry handler is necessary 
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
      new DefaultHttpMethodRetryHandler(3, false)); 

    try { 
     // Execute the method. 
     int statusCode = client.executeMethod(method); 

     if (statusCode != HttpStatus.SC_OK) { 
     System.err.println("Method failed: " + method.getStatusLine()); 
     } 

     // Read the response body. 
     byte[] responseBody = method.getResponseBody(); 

     // Deal with the response. 
     // Use caution: ensure correct character encoding and is not binary data 
     System.out.println(new String(responseBody)); 

    } catch (HttpException e) { 
     System.err.println("Fatal protocol violation: " + e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     System.err.println("Fatal transport error: " + e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     // Release the connection. 
     method.releaseConnection(); 
    } 
    } 
} 
+0

我使用的版本是4.x直接從http://hc.apache.org/ 下載並在這裏教程:http://hc.apache.org/httpcomponents -client-ga/tutorial/pdf/httpclient-tutorial.pdf 它似乎完全borked.But感謝代碼片段,我會看看我能做些什麼。 – ortonomy 2012-03-09 08:44:03

0

當我用這個(在Android)我實現了一個CustomHttpClient,下面的例子here

+0

我直接從apache下載了這個庫,網址是http://hc.apache.org/ 我會看看如果我能遵循這個規則,我會很樂意真正地建立一個連接。 – ortonomy 2012-03-09 08:42:29

-1

非常有線。有同樣的問題,我把httpclient 4.5.2這是最新版本httpclient 4.3.6和錯誤消失像魔術!