0

基本的に私は大学生専用のチャット アプリを作成しています。そのためには、UMS (大学管理システム) の詳細をチェックして本物であることを確認し、基本的な詳細を取得して、本物のチャットができるようにする必要があります。ログインだけが残っているだけで、チャットアプリはほぼ完了しています。

したがって、汎用ハンドラーから Web サイト経由で UMS ページにログインしたいと考えています。次に、その中の別のページに移動して、セッションを維持する基本情報にアクセスします。

httpwebrequest について調査しましたが、資格情報でログインできませんでした。

https://ums.lpu.in/lpuums (asp.netで作成)

ログインのために他の投稿のコードを試しました。

私はこの部分の初心者ですので、ご容赦ください..どんな助けでも大歓迎です。

4

2 に答える 2

0
public string Scrap(string Username, string Password)
    {
        string Url1 = "https://www.example.com";//first url
        string Url2 = "https://www.example.com/login.aspx";//secret url to post request to

        //first request
        CookieContainer jar = new CookieContainer();
        HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(Url1);
        request1.CookieContainer = jar;
        //Get the response from the server and save the cookies from the first request..
        HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();

        //second request
        string postData = "***viewstate here***";//VIEWSTATE
        HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(Url2);
        request2.CookieContainer = jar;
        request2.KeepAlive = true;
        request2.Referer = Url2;
        request2.Method = WebRequestMethods.Http.Post;
        request2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        request2.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
        request2.ContentType = "application/x-www-form-urlencoded";
        request2.AllowWriteStreamBuffering = true;
        request2.ProtocolVersion = HttpVersion.Version11;
        request2.AllowAutoRedirect = true;

        byte[] byteArray = Encoding.ASCII.GetBytes(postData);
        request2.ContentLength = byteArray.Length;

        Stream newStream = request2.GetRequestStream(); //open connection
        newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
        newStream.Close();

        HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse();
        using (StreamReader sr = new StreamReader(response2.GetResponseStream()))
        {
            responseData = sr.ReadToEnd();
        }

        return responseData;
    }

これは、asp.net Webサイトのリンクとviewstateを追加して廃棄することができる私にとっては機能するコードであり、Cookieも処理する必要があります。他の Web サイト (asp.net 以外) の場合、viewstate は必要ありません。フィドラーを使用して、ヘッダーとビューステートまたは Cookie に追加する必要があるものを見つけます。これが問題を抱えている場合に役立つことを願っています。:)

于 2013-03-10T12:40:55.493 に答える
0

定義された API を介した UMS との実際のハンドシェイクがなければ、UMS html をスクレイピングすることになり、これはさまざまな理由で良くありません。

Single Sign On (SSO)を読むことをお勧めします。

SSO と ASP.NET に関するいくつかの記事 - 1. Codeproject 2. MSDN 3. asp.net フォーラム

編集 1

ただし、選択肢がないと言っているので、これは悪い考えだと思いますが、Html Agility Packが Web ページのスクレイピングにどのように役立つかを示すリンクを次に示します。

スクリーン スクレイピングの欠点に注意してください。UMS からの変更は通知されず、アプリケーションが突然動作しなくなります。

于 2013-03-09T12:16:02.933 に答える