我创建了在GAE上运行并连接到特定页面的应用程序,自动登录到此页面,登录后我想接收html并进行处理。
这是代码中有问题的(writer.write part和connection.connect())部分:
this.username = URLEncoder.encode(username, "UTF-8");
this.password = URLEncoder.encode(password, "UTF-8");
this.login = "login";
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
OutputStreamWriter writer = new OutputStreamWriter(
connection.getOutputStream());
writer.write("str_login=" + login + "&str_user=" + username
+ "&str_pass=" + password);
writer.close();
connection.connect();
我在建立连接时收到IOException(connection.connect())。问题是“application / x-www-form-urlencoded”数据。当我将错误的参数传递给页面时(例如str_pasSSs,str_usernaAAme或根本没有参数)我无法登录,但我确实得到了登录页面的html响应。因此,Google App Engine似乎不支持这种通信。是否可以通过GAE支持的其他方式登录此页面?
在Wireshark中,我看到用户名和密码以纯文本形式发送为基于行的文本数据(application / x-www-form-urlencoded)。我知道这不安全,但它就是这样。
答案 0 :(得分:0)
当您调用getOutputStream()时,已经隐式建立了连接。无需再次调用connection.connect()。
此外,不是关闭输出编写器,而是尝试flush()。
作为一种最佳实践,你应该在最后一个块中关闭,关闭和连接:
InputStream in = null;
OutputStream out = null;
HttpUrlConnection conn = null;
try {
...
} catch (IOException ioe) {
...
} finally {
if (in!=null) {try {in.close()} catch (IOException e) {}}
if (out!=null) {try {out.close()} catch (IOException e) {}}
if (conn!=null) {try {conn.close()} catch (IOException e) {}}
}