5

次のコードはyahooにログインしません。どのように書き直す必要がありますか?

(もちろん、「username」と「password」は私の実際のアカウント名とパスワードに置き換えられます。)

    static void Main(string[] args)
    {
        string input = string.Format("username={0}&passwd={1}", "<username>", "<password>");

        WebRequest request = HttpWebRequest.Create("https://login.yahoo.com/config/login");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        StreamWriter writer = new StreamWriter(request.GetRequestStream());
        writer.Write(input);
        writer.Close();

        StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream());

        string x = reader.ReadToEnd();

        Console.Read();
    }
4

6 に答える 6

5

yahooページのhtmlソースを見ると、多くの非表示フィールドがあることに気付くでしょう。

フォームの非表示フィールドを示す画像

これは、たとえばCSRFからユーザーを保護するために使用されます

おそらく、最初にyahooにリクエストを送信して、有効なアンチCSRFトークンを取得し、それをリクエストに含める必要があります。また、サイトで使用されているjavascriptも確認する必要があります。たぶん、クライアントサイトで計算されたものがあり、ログインデータとともに送信します。

これらのサイトは頻繁に変更され、明日は実装が機能しない可能性があるため、注意してください。

于 2012-09-20T18:49:47.330 に答える
2

このようにログインするのは大変で、実際には不可能だと思います。本当にプログラムでログインする必要がある場合は、OpenIDまたはOAuthが必要になります。

Yahoo認証について詳しくはこちらをご覧ください

于 2012-09-21T15:51:29.667 に答える
1

フォームにはいくつかの非表示の入力要素があります。リクエストがそのログインページから発信されていることを確認するために、おそらくCookieとともに、サーバー側でそれらの存在をチェックする可能性は十分にあります。HttpWebRequestを介してリクエストに追加してみましたか?

于 2012-09-20T18:33:55.733 に答える
0

私はしばらく前に同様のタスクを実行しました。Webサイトにログインして、そこからいくつかのデータを引き出す必要がありました。私を助けるウェブサービスはありませんでした。私はVB6を使用していましたが、最終的にWebブラウザーオブジェクトを作成し、Webページをロードしてそのようにログインし、必要なデータをスクリーンスクレイピングしました。

このアプローチは粗雑で信頼性が低く、ログイン手順にキャプチャ保護が含まれている場合は機能しませんが、高速であり、よりエレガントで永続的なアプローチを見つけようとするときに役立つ場合があります。

于 2012-09-21T17:40:01.383 に答える
0

ログインページのコードを使用してyahooメールにログインするhtmlページがあります。しばらくは機能しているので、ログインページの[[ログイン]]ボタンの近くにあるhtmlを見て、httpリクエストに含める必要のある値を特定することをお勧めします。

私がyahooメールにログインするために書いたhtmlページを見ると、適切なHIDDEN値をサーバーに渡すだけでなく、明らかにユーザーとパスを渡す必要があります。したがって、htmlフォーム内のHIDDEN値タグを調べて、httpWebリクエストで送信する必要があるタグを確認することをお勧めします。基本的に、ログインページフォームを.NetFrameworkスタイルで再作成します

これがお役に立てば幸いです:)

于 2012-09-21T21:38:44.310 に答える
0

これは、ワークフローとコードを使用してOAuthを説明するリンクです。Yahooの他に、Twitterは学ぶのに良いサイトです。リンク内の一部のコードはTwitterを使用しています。OAuth2.0がリリースされていることに注意してください。

http://www.codeproject.com/Articles/131978/Demystifying-OAuth

于 2012-09-22T08:24:13.690 に答える