我發現難以使用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();
}
我看過谷歌,但我無法弄清楚發生了什麼。我的猜測是接受的內容類型有問題,但我試圖設置不同類型的內容類型而不成功。你有什麼想法我做錯了嗎?謝謝大家。
curl -verbose -silent?爲什麼? –
請檢查/提供curl中的輸出/詳細信息。 –
你有什麼「問題」?請添加任何異常stacktrace到帖子 – wero