在建立java.net连接时在GAE上获取IOException

时间:2013-01-01 12:06:14

标签: google-app-engine post login

我创建了在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)。我知道这不安全,但它就是这样。

1 个答案:

答案 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) {}} 
}