HTTP500內部伺服器錯誤
阿新 • • 發佈:2019-01-22
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;
}