C#使用HttpWebRequest進行HTTP請求發送和接收的一些小結。(新增修複.NET4.0以下關於cookie的bug)

來源:互聯網
上載者:User
private CookieContainer CC = new CookieContainer();private void BugFix_CookieDomain(CookieContainer cookieContainer)        {            System.Type _ContainerType = typeof(CookieContainer);            Hashtable table = (Hashtable)_ContainerType.InvokeMember("m_domainTable",                                       System.Reflection.BindingFlags.NonPublic |                                       System.Reflection.BindingFlags.GetField |                                       System.Reflection.BindingFlags.Instance,                                       null,                                       cookieContainer,                                       new object[] { });            ArrayList keys = new ArrayList(table.Keys);            foreach (string keyObj in keys)            {                string key = (keyObj as string);                if (key[0] == '.')                {                    string newKey = key.Remove(0, 1);                    table[newKey] = table[keyObj];                }            }        }private String DoGet(String url){    String data = "";    HttpWebRequest webReqst = (HttpWebRequest)WebRequest.Create(url);    webReqst.Method = "GET";    webReqst.UserAgent = DefaultUserAgent;    webReqst.KeepAlive = true;    //如果在接收後想儲存CookieContainer並再次提交(比如登入後操作)    //必須保證url的網域名稱前面有www,比如http://www.a.com,    //而http://a.com是不行的,感覺是微軟的bug    webReqst.CookieContainer = CC;    if (_proxy != "")    {//webReqst.Proxy =;    }    webReqst.Timeout = 30000;    try    {HttpWebResponse webResponse = (HttpWebResponse)webReqst.GetResponse();if (webResponse.StatusCode == HttpStatusCode.OK && webResponse.ContentLength < 1024 * 1024){    StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.Default);    data = reader.ReadToEnd();}    }    catch    {    }    return data;}//把HTTP請求獲得的資料儲存成檔案,比片什麼的。private bool DoGet2File(String url, String filename){    HttpWebRequest webReqst = (HttpWebRequest)WebRequest.Create(url);    webReqst.Method = "GET";    webReqst.UserAgent = DefaultUserAgent;    webReqst.KeepAlive = true;    webReqst.CookieContainer = CC;    if (_proxy != "")    {//webReqst.Proxy =;    }    webReqst.Timeout = 30000;    try    {HttpWebResponse webResponse = (HttpWebResponse)webReqst.GetResponse();if (webResponse.StatusCode == HttpStatusCode.OK && webResponse.ContentLength < 1024 * 1024){    FileInfo fi = new FileInfo(filename);    FileStream sw = fi.Create();    Stream sm = webResponse.GetResponseStream();    byte[] buffer = new byte[1024];    int size = sm.Read(buffer, 0, buffer.Length);    while (size > 0)    {sw.Write(buffer, 0, size);size = sm.Read(buffer, 0, buffer.Length);    }    sm.Close();    sw.Close();    return true;}else    return false;    }    catch    {return false;    }}private String DoPost(String url, String Content){    string html = "";    HttpWebRequest webReqst = (HttpWebRequest)WebRequest.Create(url);    webReqst.Method = "POST";    webReqst.UserAgent = DefaultUserAgent;    webReqst.ContentType = "application/x-www-form-urlencoded";    webReqst.ContentLength = Content.Length;    webReqst.CookieContainer = CC;    if (_proxy != "")    {//webReqst.Proxy =;    }    webReqst.Timeout = 30000;    try    {byte[] data = Encoding.Default.GetBytes(Content);Stream stream = webReqst.GetRequestStream();stream.Write(data, 0, data.Length);HttpWebResponse webResponse = (HttpWebResponse)webReqst.GetResponse();if (webResponse.StatusCode == HttpStatusCode.OK && webResponse.ContentLength < 1024 * 1024){    StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.Default);    html = reader.ReadToEnd();}    }    catch    {    }    return html;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.