1. 程式人生 > >HTTP500內部伺服器錯誤

HTTP500內部伺服器錯誤

1.問題描述

1.使用http方式請求對方伺服器,返回JSON格式資料
2.由於是測試環境,網段不是同一個,對方伺服器網段做了代理,我們能ping通,也能telnet
3.使用瀏覽器訪問能正常返回JSON格式資料
4.用程式碼解析http請求一直報500錯誤,對方覺得是我們程式碼問題,但是我們用程式碼解析公網上的一些請求是正常的;而且我們將程式碼發給對方,讓對方解析,也是正常的

2.問題解決

由於我們本地看不出什麼問題,我們用程式碼請求,讓對方伺服器進行抓包除錯。
1.對方伺服器讓我們將請求的Content-Type改為application/json,請求仍然有問題
Error-Reason:CHARACTER:error="json"; error_description*=UTF-8''Expected one of: <<{,[>> but got: <<C>>


2.對方查了下,發現伺服器Content-Type填什麼都報錯,application/x-www-form-urlencoded、application/json都報錯,只有不填才能正確,空串也不行;我們就說http請求頭有個預設值就是x-www-form-urlencoded,對方伺服器端改了這個Content-Type的請求頭,我們程式碼就能正常訪問到JSON資料了

3.HTTP請求程式碼

public static String sendGet(String url, String param) {  
       String result = "";
       BufferedReader in
= null; try { String urlName = url + "?" + param; URL realUrl = new URL(urlName); // 開啟和URL之間的連線 URLConnection conn = realUrl.openConnection(); // 設定通用的請求屬性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection"
, "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); // 建立實際的連線 conn.connect(); // 獲取所有響應頭欄位 Map<String, List<String>> map = conn.getHeaderFields(); // 遍歷所有的響應頭欄位 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定義BufferedReader輸入流來讀取URL的響應 in = new BufferedReader( new InputStreamReader(conn.getInputStream(),"UTF-8")); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("傳送GET請求出現異常!" + e); e.printStackTrace(); } // 使用finally塊來關閉輸入流 finally { try { if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; }