C# 類比http請求網頁資料 [網頁爬蟲]

來源:互聯網
上載者:User

標籤:.text   enc   memory   tco   rman   res   bll   pac   字元   

using System;using System.Collections.Specialized;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Text.RegularExpressions;using FTE.Framework.Log4NetService;namespace Proxy.BllServices{    /// <summary>    /// http訪問類    /// </summary>    public class HttpHelper    {        /// <summary>        /// 訪問失敗的統一返回字元        /// </summary>        public String ErrorReturn { get; private set; } = "HttpHelper access error!";        /// <summary>        /// 登入後儲存的cookie        /// </summary>        private CookieContainer Cookie = new CookieContainer();        /// <summary>        /// http post 訪問網頁        /// </summary>        /// <param name="Url"></param>        /// <param name="postDataStr"></param>        /// <returns></returns>        public string HttpPostString(string Url, string postDataStr)        {            try            {                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);                request.Method = "POST";                request.ContentType = "application/x-www-form-urlencoded";                request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);                request.CookieContainer = Cookie;                Stream myRequestStream = request.GetRequestStream();                StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));                myStreamWriter.Write(postDataStr);                myStreamWriter.Close();                HttpWebResponse response = (HttpWebResponse)request.GetResponse();                response.Cookies = Cookie.GetCookies(response.ResponseUri);                Stream myResponseStream = response.GetResponseStream();                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));                string retString = myStreamReader.ReadToEnd();                myStreamReader.Close();                myResponseStream.Close();                return retString;            }            catch (Exception ex)            {                LoggerManagerSingle.Instance.Error("http post 網站出錯", ex);            }            return ErrorReturn;        }        public string HttpGet(string Url, string postDataStr)        {            try            {                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);                request.Method = "GET";                request.ContentType = "text/html;charset=UTF-8";                request.CookieContainer = Cookie;                HttpWebResponse response = (HttpWebResponse)request.GetResponse();                Stream myResponseStream = response.GetResponseStream();                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));                string retString = myStreamReader.ReadToEnd();                myStreamReader.Close();                myResponseStream.Close();                return retString;            }            catch (Exception ex)            {                LoggerManagerSingle.Instance.Error("http get 網站出錯", ex);            }            return ErrorReturn;        }        /// <summary>        /// 使用form方式post資料[不包含檔案]        /// </summary>        /// <param name="url"></param>        /// <param name="stringDict"></param>        /// <returns></returns>        public string HttpPostForm(string url, NameValueCollection stringDict)        {            try            {                string responseContent;                var memStream = new MemoryStream();                var webRequest = (HttpWebRequest)WebRequest.Create(url);                // 邊界符                  var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");                // 邊界符                  var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");                // 最後的結束符                  var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");                // 設定屬性                  webRequest.CookieContainer = Cookie;                webRequest.Method = "POST";                webRequest.ContentType = "multipart/form-data; boundary=" + boundary;                // 寫入字串的Key                  var stringKeyHeader = "\r\n--" + boundary +                                       "\r\nContent-Disposition: form-data; name=\"{0}\"" +                                       "\r\n\r\n{1}\r\n";                foreach (byte[] formitembytes in from string key in stringDict.Keys                                                 select string.Format(stringKeyHeader, key, stringDict[key])                                                     into formitem                                                 select Encoding.UTF8.GetBytes(formitem))                {                    memStream.Write(formitembytes, 0, formitembytes.Length);                }                // 寫入最後的結束邊界符                  memStream.Write(endBoundary, 0, endBoundary.Length);                webRequest.ContentLength = memStream.Length;                var requestStream = webRequest.GetRequestStream();                memStream.Position = 0;                var tempBuffer = new byte[memStream.Length];                memStream.Read(tempBuffer, 0, tempBuffer.Length);                memStream.Close();                requestStream.Write(tempBuffer, 0, tempBuffer.Length);                requestStream.Close();                var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();                using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),                                                                Encoding.GetEncoding("utf-8")))                {                    responseContent = httpStreamReader.ReadToEnd();                }                httpWebResponse.Close();                webRequest.Abort();                return responseContent;            }            catch (Exception ex)            {                LoggerManagerSingle.Instance.Error("http form post 網站出錯", ex);            }            return ErrorReturn;        }    }}

              調用例子:

//1.helper.HttpPostString("http://192.168.1.1/", "luci_username=root&luci_password=password");//2.NameValueCollection stringDict = new NameValueCollection();stringDict.Add("token", token);stringDict.Add("cbid.wireless.default_radio1.ssid", "everTestWifi");helper.HttpPostData("http://192.168.1.1/cgi-bin/luci/admin/network/wireless/radio1.network2", stringDict);

  參考串連:

    http://www.cnblogs.com/xssxss/archive/2012/07/03/2574554.html

    http://blog.csdn.net/flymorn/article/details/6769722

 

C# 類比http請求網頁資料 [網頁爬蟲]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.