java.net.ProtocolException:意外的状态行:<!DOCTYPE HTML PUBLIC“ - // W3C // DTD HTML 4.01 // EN”

问题描述:

我想使用HTTP GET方法获取数据。 但是回复是错误的java.net.ProtocolException:意外的状态行:<!DOCTYPE HTML PUBLIC“ - // W3C // DTD HTML 4.01 // EN”

java.net.ProtocolException: Unexpected status line: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 

如何解决?

public JSONArray GetPost_sport(String token, String sport_type){ 

    JSONArray jsonArray = null; 

    try { 
     URL url = new URL("http://o-two-sport.com/api/posts/?sport_type="+sport_type); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestProperty("Authorization","Token " +token); 
     conn.setRequestProperty("Content-Type", "application/json"); 
     conn.setRequestProperty("Connection", "close"); 
     conn.connect(); 

     InputStream is = conn.getInputStream(); 
     BufferedReader streamReader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
     StringBuilder responseStrBuilder = new StringBuilder(); 

     String inputStr; 
     while ((inputStr = streamReader.readLine()) != null) 
      responseStrBuilder.append(inputStr); 

     jsonArray = new JSONArray(responseStrBuilder.toString()); 

    } catch (IOException | JSONException e) { 
     e.printStackTrace(); 
    } 

    return jsonArray; 
} 
+0

HTTP响应不是JSON海峡,它由HTML返回错误信息。您需要确认当您请求的HTTP响应无效时,哪种类型的内容。 – neuo

您正在检索一个通常的HTML页面作为响应,它不是JSON就绪。找到此网站的API以检索JSON内容类型。

,我想你应该添加format=json到您的网址:

new URL("http://o-two-sport.com/api/posts/?format=json&sport_type="+sport_type);