1

JavaコードからプログラムでOWA(Microsoft Outlook Web Access-Webベースの電子メールクライアント)にログインし、受信トレイの未読数だけを取得する方法に興味があります。この数値は、受信トレイのWebページのHTMLソースから読み取ることができます。 -しかし、問題はそこに到達することです-ログインします。

基本的に、OWAログオンページのHTMLソースを見ると、HTMLフォーム要素があることがわかります。

<form action="owaauth.dll" method="POST" name="logonForm" autocomplete="off"> 

その中のボタン要素によって送信されます:

<input type="submit" class="btn" value="Log On" onclick="clkLgn()"> 

clkLgn()スクリプトを調査したところ、ドキュメントにCookieが送信されるため、重要ではない可能性があります。

function clkLgn()
{
    if(gbid("rdoPrvt").checked)
    {
        var oD=new Date();
        oD.setTime(oD.getTime()+2*7*24*60*60*1000);
        var sA="acc="+(gbid("chkBsc").checked?1:0);
        var sL="lgn="+gbid("username").value;
        document.cookie="logondata="+sA+"&"+sL+";expires="+oD.toUTCString();
    }
}

基本的に、このフォームを送信するにはどうすればよいですか?次のコードは、この問題に対する私の試みです。HTTP接続を確立できますが、正しいHTTP要求をPOSTできないようです。

                URL urlObject = new URL(url);

                HttpURLConnection hConnection = (HttpURLConnection)urlObject.openConnection();
                HttpURLConnection.setFollowRedirects(true);
                hConnection.setDoOutput(true);
                hConnection.setRequestMethod("POST");

                PrintStream ps = new PrintStream(hConnection.getOutputStream());

                ps.print("username="+username+"&amp;password="+password);
                ps.close();


                hConnection.connect();

                if( HttpURLConnection.HTTP_OK == hConnection.getResponseCode() )
                {
                    InputStream is = hConnection.getInputStream();
                    OutputStream os = new FileOutputStream("output.html");
                    int data;
                    while((data=is.read()) != -1)
                    {
                      os.write(data);
                    }
                    is.close();
                    os.close();
                    hConnection.disconnect();
                }

同じログオンHTMLページを返し続けるだけです。

4

2 に答える 2

3

そのJavaScriptは確かに重要なことをします:それはドキュメントにクッキーを追加します。すべてのHTTPリクエストのヘッダーに沿ってすべての有効なCookieを送信するには、適切なHTTPクライアントが必要です。プログラムで同じことを行う必要があります。を使用してヘッダーを追加できますURLConnection#setRequestProperty()

さらに、プログラムでフォームを送信する際にも考慮すべき点がいくつかあります。非表示の入力フィールド(input type="hidden")をスキップしないでください。これらは関連性がある可能性があります。また、name=valueプログラムで押したい送信ボタンのペアをリクエストパラメータとして送信する必要があります。最後に、&amp;パラメータのペアを連結するためにを使用するのではなく、を使用する必要があり&ます。

私はそれが最終的に機能することを保証しないことに注意してください。OWAのものがボットに対して他の何らかの予防策を持っているかもしれませんが、それはこれまでに発見された問題を解決するはずです。

参照:


ちなみに、JavaMailのようなSMTP / IMAP APIを使って接続することを考えたことはありますか?

于 2010-07-19T18:49:30.103 に答える
1

なぜフォームを通過するのですか?MSは最近、ExchangeサーバーAPI用のJavaクライアントをオープンソース化しました。

http://blogs.office.com/2014/08/28/open-sourcing-exchange-web-services-ews-java-api/

https://github.com/OfficeDev/ews-java-api

于 2014-10-28T17:57:46.153 に答える