我正在使用HttpURLConnectionJava中的对象进行基本的HTTP身份验证。
HttpURLConnection
URL urlUse = new URL(url); HttpURLConnection conn = null; conn = (HttpURLConnection) urlUse.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Content-length", "0"); conn.setUseCaches(false); conn.setAllowUserInteraction(false); conn.setConnectTimeout(timeout); conn.setReadTimeout(timeout); conn.connect(); if(conn.getResponseCode()==201 || conn.getResponseCode()==200) { success = true; }
我期望一个JSON对象,或者是有效JSON对象格式的字符串数据,或者是带有简单纯文本(即有效JSON)的HTML。HttpURLConnection返回响应后,如何从中访问它?
您可以使用以下方法获取原始数据。顺便说一句,此模式适用于Java6。如果您使用的是Java 7或更高版本,请考虑try-with-resources模式。
public String getJSON(String url, int timeout) { HttpURLConnection c = null; try { URL u = new URL(url); c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setRequestProperty("Content-length", "0"); c.setUseCaches(false); c.setAllowUserInteraction(false); c.setConnectTimeout(timeout); c.setReadTimeout(timeout); c.connect(); int status = c.getResponseCode(); switch (status) { case 200: case 201: BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line+"\n"); } br.close(); return sb.toString(); } } catch (MalformedURLException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } finally { if (c != null) { try { c.disconnect(); } catch (Exception ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } } return null; }
然后,您可以将返回的字符串与Google Gson一起使用,以将JSON映射到指定类的对象,如下所示:
String data = getJSON("http://localhost/authmanager.php"); AuthMsg msg = new Gson().fromJson(data, AuthMsg.class); System.out.println(msg);
有一个AuthMsg类的示例:
public class AuthMsg { private int code; private String message; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
由返回的JSON必须如下所示:
{"code":1,"message":"Logged in"}