2015-09-07 71 views
1

我發現難以使用apache http客戶端在Java中執行簡單的http請求。該請求是一個簡單的GET朝向以下url http://109.231.121.64:20622/v1/collections/S4C/objects/OpsConfig/data(目前正在運行)。請求成功使用curl如以下:Java Apache HTTP客戶端失敗,併發出http請求,其中cURL成功

curl -v -X GET http://109.231.121.64:20622/v1/collections/S4C/objects/OpsConfig/data > s4cOpsInitModel.xml  

這是輸出:

* Hostname was NOT found in DNS cache  
* Trying 109.231.121.64...  
% Total % Received % Xferd Average Speed Time Time  Time Current  
           Dload Upload Total Spent Left Speed 
0  0 0  0 0  0  0  0 --:--:-- --:--:----:--:--  0* Connected to 109.231.121.64 (109.231.121.64) port 20622 (#0) 
> GET /v1/collections/S4C/objects/OpsConfig/data HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: 109.231.121.64:20622 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< connection: keep-alive 
* Server Cowboy is not blacklisted 
< server: Cowboy 
< date: Tue, 08 Sep 2015 08:11:22 GMT 
< content-length: 2349 
< content-type: application/octet-stream 
< 
{ [data not shown] 
100 2349 100 2349 0  0 27819  0 --:--:-- --:--:----:--:-- 27964 
* Connection #0 to host 109.231.121.64 left intact 

但隨後做同樣的,當Java中的HTTP錯誤狀態500秒返回。這裏是我使用的代碼:

try { 


     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet getRequest = new HttpGet(
      "http://109.231.121.64:20622/v1/collections/S4C/objects/OpsConfig/data"); 


     HttpResponse response = httpClient.execute(getRequest); 

     if (response.getStatusLine().getStatusCode() != 200) { 
      throw new RuntimeException("Failed : HTTP error code : " 
       + response.getStatusLine().getStatusCode()); 
     } 

     BufferedReader br = new BufferedReader(
         new InputStreamReader((response.getEntity().getContent()))); 

     String output; 
     System.out.println("Output from Server .... \n"); 
     while ((output = br.readLine()) != null) { 
      System.out.println(output); 
     } 

     httpClient.getConnectionManager().shutdown(); 

     } catch (ClientProtocolException e) { 

     e.printStackTrace(); 

     } catch (IOException e) { 

     e.printStackTrace(); 
}  

我看過谷歌,但我無法弄清楚發生了什麼。我的猜測是接受的內容類型有問題,但我試圖設置不同類型的內容類型而不成功。你有什麼想法我做錯了嗎?謝謝大家。

+0

curl -verbose -silent?爲什麼? –

+0

請檢查/提供curl中的輸出/詳細信息。 –

+0

你有什麼「問題」?請添加任何異常stacktrace到帖子 – wero

回答

0

解決了,它似乎與接受的內容類型有關。將以下標題添加到http請求中可以使其工作。

getRequest.setHeader("accept", "*/*");  
0

我今天也有這個問題,但出於不同的原因。我正在絞死我的大腦。當時我正在向Sharepoint發送http請求。

捲曲 - 工作正常。 Http客戶端沒有。

實現它需要很長時間,但這是因爲我手動發送的FedAuthrtFa Cookie會以某種方式干擾保存在cookie存儲中併發回的cookie。所以第一個請求會正常工作,然後第二個請求會出錯。

解決方案是在每次請求之前清除cookie存儲,或者如果請求中已經存在Cookie,則不要在請求中設置rtfa fedauth cookie。

相關問題