1

HttpWebRequest を使用してログイン ページ (yahoo メールなど) への Post 要求を実行し、返されたページ ソースを調べようとしています。

しかし、Post メソッドを使用すると、まだログイン ページが表示されます。

これが私の方法です:

public static string GetResponse(string sURL, ref CookieContainer cookies, string sParameters)
    {
        HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(sURL);
        httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
        httpRequest.CookieContainer = cookies;
        httpRequest.Method = "Post";
        httpRequest.ContentType = "application/x-www-form-urlencoded";
        httpRequest.ContentLength = sParameters.Length;
        httpRequest.AllowAutoRedirect = true;            

        using (Stream stream = httpRequest.GetRequestStream())
        {
            stream.Write(Encoding.UTF8.GetBytes(sParameters), 0, sParameters.Length);
        }

        HttpWebResponse httpWebResponse = (HttpWebResponse)httpRequest.GetResponse();

        string sResponse;
        using (Stream stream = httpWebResponse.GetResponseStream())
        {
            StreamReader reader = new StreamReader(stream, System.Text.Encoding.GetEncoding(936));
            sResponse = reader.ReadToEnd();
        }

        return sResponse;
    }

メソッドを呼び出すコードは次のとおりです。

        string sParameter = ".tries=1&.src=ym&.md5=&.hash=&.js=&.last=&promo=&.intl=us&.lang=en-US&.bypass=&.partner=&.u=eip09319532h1&.v=0&.challenge=3QjvX9eEFtJRrABhZp9kgS9IT.VO&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.chkP=Y&.done=http%3A%2F%2Fmail.yahoo.com&.pd=ym_ver%3D0%26c%3D%26ivt%3D%26sg%3D&.ws=1&.cp=0&nr=0&pad=3&aad=3&login=username%40yahoo.com&passwd=xxxxx&.persistent=&.save=&passwd_raw=";
        System.Net.CookieContainer coookies = null ;
        string sResponse;

        sResponse = GetResponse(sUrl, ref coookies, sParameter);

文字列 sParameter は、Firefox の Firebug プラグインでサーバーに投稿されたデータを調べることによって取得されました。しかし、上に投稿したパラメーターでは、ユーザー ID とパスワードをマスクしました。

セッションを再利用したかったので、メソッドへの参照として CookieContainer オブジェクトを渡しました。

コンパイルして実行しますが、返されたページはログイン状態ではありません。

私はスタックオーバーフローでいくつかの同様の質問を読みましたが、それでも私の方法を機能させることはできません. あなたの助けに感謝します。

4

0 に答える 0