我正在尝试使用 HttpURLConnection 登录网站。
如果登录成功,服务器会在当前会话中设置user_id
变量。
在问题上使用SO和Google developer docs我能够将我的凭据发布到服务器,但是如何从会话中获取user_id?
以下是我的代码:
String body = "user=chris&password=geheim";
HttpURLConnection conn = (HttpURLConnection) new URL(LOGIN_URL).openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setInstanceFollowRedirects(false);
conn.connect();
OutputStream out = conn.getOutputStream();
BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
out.write(body.getBytes());
int response = conn.getResponseCode();
String s = "";
for (int c = in.read(); c != -1; c = in.read()) {
s += (char) c;
}
System.out.println(response);
System.out.println(s);
System.out.println(conn.getHeaderFields());
注意:为了便于阅读,我省略了所有异常处理和资源管理。这也只是连接到我的localhost的试用代码,所以不用担心硬编码凭证和其他不安全因素。
好吧,显然我的身体毕竟没有被提交。当我在服务器代码中执行 console.log(util.inspect(req.body))
时,它会打印{}
。我仔细检查了请求方法,那就是POST。我究竟做错了什么?
重写了代码,即使我认为我做的与现在工作之前完全相同。很奇怪,但无论如何。
答案 0 :(得分:2)
存储user_id
的会话保留在服务器上。所有客户端通常获取的是会话cookie(例如JSESSIONID)中的会话ID,该会话cookie被传递回服务器,以便服务器可以再次找到正确的会话和数据。
这就是为什么你也可以将大量数据放入用户的会话中...想象所有这些实际上都传递给了客户端!
答案 1 :(得分:0)
除非服务器中有合作活动页面,否则您无法提供给您。