iT邦幫忙

0

C# HttpWebRequest 不會登入

  • 分享至 

  • xImage

各位前輩 請教教小弟 如何用 C# HttpWebRequest 登入某個網頁 因為我看回傳的網頁碼都是登入頁面的程式碼

這是網頁網址 http://ag1.amctqk418.cdbybj.com:88/

下面是小弟寫的

        string param = "loginName=" + loginname + "& loginPwd=" + loginpassword;
        byte[] bs = Encoding.ASCII.GetBytes(param);

        string URL = "http://ag1.amctqk418.cdbybj.com:88/";
          

            HttpWebRequest request = HttpWebRequest.Create(URL) as HttpWebRequest;
           
            
            request.Referer = "http://ag1.amctqk418.cdbybj.com:88/index.aspx";
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36";
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
            request.Headers.Set("Accept-Language", "zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7");
            //request.Headers.Set("Accept-Encoding", "gzip, deflate");
            

            string result = null;
            request.Method = "POST";    // 方法
            request.KeepAlive = true; //是否保持連線
            request.ContentType = "application/x-www-form-urlencoded";              
            request.CookieContainer = session;

            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(bs, 0, bs.Length);
                reqStream.Close();
            }

            using (WebResponse response = request.GetResponse())
        {
            StreamReader srr = new StreamReader(response.GetResponseStream(),System.Text.Encoding.UTF8);
            result = srr.ReadToEnd();
            
            cookie = request.CookieContainer.GetCookieHeader(request.RequestUri);
            srr.Close();               
        }


         Console.WriteLine(result);

我只有在reqStream.Write(bs, 0, bs.Length); 這裡面發現下面例外 我不知道有沒有影響
https://ithelp.ithome.com.tw/upload/images/20180921/20110807HCdsU2RJWA.png

看更多先前的討論...收起先前的討論...
Homura iT邦高手 1 級 ‧ 2018-09-21 09:28:39 檢舉
程式碼沒看到你把帳密丟出去啊....
param建立後都沒使用過@@
Homura 大大 不好意思 那是我自己貼錯程式碼 我已經改過 了 我有使用param 但是結果一樣
fillano iT邦超人 1 級 ‧ 2018-09-21 16:46:08 檢舉
https://www.keycdn.com/blog/headless-browsers/
可以考慮用其他方法做...
marlin12 iT邦研究生 5 級 ‧ 2018-09-21 20:40:59 檢舉
@y02090911y:
你這個url只是一個登入網頁(不是web api),怎麽可能用post去登入?!

應該改用[瀏覽器自動化]工具(即是上面fillano大大說的headless-browser加上對應的驅動器),去模擬用戶輸入登入資料。

如果不熟識寫程式,可以考慮用Selenium IDE。它可以像macro recorder一樣,把你在網頁上的輸入記錄下來,然後重播。
https://docs.seleniumhq.org/projects/ide/
石頭 iT邦高手 1 級 ‧ 2018-09-22 00:18:36 檢舉
他登入的url 是 http://ag1.amctqk418.cdbybj.com:88/Handler/LoginHandler.ashx?action=user_login 這個網站使用 一般處理程序來當作登入
詳細資料登入程式碼在js中 http://ag1.amctqk418.cdbybj.com:88/Scripts/login.js?20180122

如果要做爬蟲模擬登入 首先先去找登入Http流程(Http是無狀態協議 所以你要模擬瀏覽器 幫你做的很多事情 例如 存cookie...)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2018-09-21 12:05:16

你需要的功能可能有點算高級爬蟲了,
上網搜尋一下 高級爬蟲 也許會找到你要的,
單純 HttpWebRequest 能夠做的比較有限.

我要發表回答

立即登入回答