1

GAE で実行され、特定のページに接続し、このページに自動的にログインし、ログイン後に html を受信して​​処理するアプリケーションを作成しました。

コードの問題のある部分 (writer.write 部分と 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_passSSs、str_usernaAAme、またはパラメーターがまったくない)、ログインできませんが、ログイン ページの html で応答が返されます。したがって、Google App Engine はこの種の通信をサポートしていないようです。GAE がサポートする他の方法でこのページにログインすることはできますか?

Wireshark では、ユーザー名とパスワードが行ベースのテキスト データ (application/x-www-form-urlencoded) としてプレーンテキストで送信されることがわかりました。これが安全ではないことはわかっていますが、それが現状です。

4

1 に答える 1

0

getOutputStream()を呼び出すと、接続はすでに暗黙的に確立されています。connection.connect()を再度呼び出す必要はありません。

また、出力ライターを閉じる代わりに、代わりにflush()を試してください。

ベストプラクティスとして、finallyブロックで閉じ、閉じ、接続する必要があります。

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) {}} 
} 
于 2013-01-03T09:28:07.267 に答える