我正在尝试使用java.net.urlconnection
对服务器的安全URL进行身份验证-基于使用java.net.URLConnection触发和处理HTTP请求的有用教程
回复如下——
返回:会话id对象:{'session_id': 'username:session_token'}
这个session_id
将用于所有需要认证的方法。
这个响应是JSON响应,我正在考虑使用谷歌GSON库(因为我的web应用程序是在谷歌应用程序引擎)。
到目前为止我使用的代码(基于我上面给出的教程链接)如下所示——
String url = "https://api.wordstream.com/authentication/login";
String charset = "UTF-8";
String param1 = WORDSTREAM_API_USERNAME;
String param2 = WORDSTREAM_API_PASSWORD;
// ...
String query = String.format("username=%s&password=%s",
URLEncoder.encode(param1, charset),
URLEncoder.encode(param2, charset));
URLConnection connection = new URL(url + "?" + query).openConnection();
connection.setRequestProperty("Accept-Charset", charset);
InputStream response = connection.getInputStream();
InputStream error = ((HttpURLConnection) connection).getErrorStream();
//now checking HTTP Response status
int status = ((HttpURLConnection) connection).getResponseCode();
如何进一步获得JSON响应并从该响应中正确检索会话ID ?
另一个问题-我想将会话ID存储在可以通过javascript函数访问的会话数据中,因为我计划使用javascript函数进行调用并获得进一步的数据。这是可能的吗?如何实现?
步骤1-创建子类-将其声明为静态,以便GSON库可以使用它。这个子类应该模拟一个JSON响应中包含的数据——在我们的例子中,只有会话ID存储在响应中——因此这个类只包含一个字符串变量…
static class LR {
public String response;
public LR() {
// No args constructor for LR
}
}
现在,使用BUfferedReader和readline读取整个响应并将其存储在一个字符串变量中。
InputStream response = connection.getInputStream();
BufferedReader br = new BufferedReader(new
InputStreamReader(response));
String str="", temp;
while (null != ((temp = br.readLine())))
{
System.out.println (str);
str=str + temp;
}
最后,调用'fromJSON(string, class)'来获取值-
Gson gson = new Gson();
LR obj2 = gson.fromJson(str, LR.class);
return(" Session ID="+ obj2.response);