1

http を使用してサーバーにコマンドを送信しています。現在、サーバーから返された応答を解析する必要があります (コマンド ライン経由でコマンドを送信すると、サーバーの応答がブラウザーに表示されます)。

次のような多くのリソースがあります: Saving a web page to a file in Javaは、cnn.com などのページをスクレイピングする方法を明確に示しています。ただし、これはカメラが特定のコマンドを受信したときにのみ生成される応答ページであるため、Mike Deck (上記のリンク) で説明されている方法を使用しようとしても失敗しました。(具体的には、プログラムがページを再度要求すると、サーバーは 401 エラーを返します。)

サーバーからの応答により、ブラウザで新しいタブが開きます。基本的に、Java を使用して現在の Web ページを保存する方法を知る必要があります。これは、ファイルを読み取ることがおそらくこれにアプローチする最も簡単な方法だからです。これを行う方法を知っている人はいますか?

TL;DR Java を使用して現在の Web ページを webpage.html または webpage.txt ファイルに保存するにはどうすればよいですか?

編集: Apache commons コーデックの Base64 を使用して、401 認証の問題を解決しました。ただし、InputStream に接続しようとすると、まだ 400 エラーが発生します (以下を参照)。これは、そもそも接続が確立されていないということですか?

    URL url = new URL ("http://"+ipAddress+"/axis-cgi/record/record.cgi?diskid=SD_DISK");
    byte[] encodedBytes = Base64.encodeBase64("root:pass".getBytes());
    String encoding = new String (encodedBytes);

    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setDoInput (true);
    connection.setRequestProperty  ("Authorization", "Basic " + encoding);

    connection.connect();

    InputStream content = (InputStream)connection.getInputStream();
    BufferedReader in   = new BufferedReader (new InputStreamReader (content));
    String line;

    while ((line = in.readLine()) != null) {
        System.out.println(line);
    }

編集 2:リクエストを GET に変更すると、問題が解決しました。

4

1 に答える 1

0

上記のコードを精査しながら、変更することにしました

connection.setRequestMethod("POST");

connection.setRequestMethod("GET");

これで私の問題は解決しました。後から考えると、サーバーが HTTP を認識していなかったのは、投稿に伴うさまざまなトラップを処理するように設定されていなかったからだと思います。

于 2013-07-31T22:23:46.080 に答える