http的幾種請求方法

(http的請求關鍵在於編碼 )

1.第一種請求

        /// <summary>
        /// Get請求
        /// </summary>
        /// <param name="url">請求的url</param>
        /// <param name="reqHead">請求的頭部</param>
        /// <returns></returns>
        public static string Get(string url, string reqHead)
        {
            string result = "";
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
            httpWebRequest.Method = "GET";
            httpWebRequest.Headers.Add("Authorization", reqHead);
            httpWebRequest.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse httpWebResponse;
            try
            {
                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            }
            catch (WebException e)
            {
                httpWebResponse = (HttpWebResponse)e.Response;
            }
            Stream responseStream = httpWebResponse.GetResponseStream();
            using (StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8))
            {
                result = streamReader.ReadToEnd();
            }
            return result;
        }
        /// <summary>
        /// Post請求
        /// </summary>
        /// <param name="url">請求Url</param>
        /// <param name="reqBody">請求內容</param>
        /// <param name="reqHead">請求頭部</param>
        /// <returns></returns>
        public static string Post(string url, string reqBody, string reqHead)
        {
            string result = "";
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
            httpWebRequest.Method = "POST";
            httpWebRequest.Headers.Add("Authorization", reqHead);
            httpWebRequest.ContentType = "application/x-www-form-urlencoded";
            byte[] bytes = Encoding.UTF8.GetBytes(reqBody);
            httpWebRequest.ContentLength = (long)bytes.Length;
            using (Stream requestStream = httpWebRequest.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Close();
            }
            HttpWebResponse httpWebResponse;
            try
            {
                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            }
            catch (WebException e)
            {
                httpWebResponse = (HttpWebResponse)e.Response;
            }
            Stream responseStream = httpWebResponse.GetResponseStream();
            using (StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8))
            {
                result = streamReader.ReadToEnd();
            }      
            return result;
        }

2.第二種方法:

        /// <summary>  
        /// get請求  
        /// </summary>  
        /// <param name="url"></param>  
        /// <returns></returns>  
        public static string GetResponse(string url)
        {
            if (url.StartsWith("https"))
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

            System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
            httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.9");
            httpClient.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
            httpClient.DefaultRequestHeaders.Accept.Add(
               new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            System.Net.Http.HttpResponseMessage response = httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                string result = response.Content.ReadAsStringAsync().Result;
                return result;
            }
            return null;
        }

 

        /// <summary>  
        /// post請求  
        /// </summary>  
        /// <param name="url"></param>  
        /// <param name="postData">post數據</param>  
        /// <returns></returns>  
        public static string PostResponse(string url, string postData)
        {
            if (url.StartsWith("https"))
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

            System.Net.Http.HttpContent httpContent = new System.Net.Http.StringContent(postData, Encoding.UTF8, "application/json");

            System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
            httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.9");
            httpClient.DefaultRequestHeaders.Accept.Add(
                new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            System.Net.Http.HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
            if (response.IsSuccessStatusCode)
            {
                string result = response.Content.ReadAsStringAsync().Result;
                return result;
            }
            return null;
        }

 3.第三種寫法:

        //表明身份的作用域,這裏模擬瀏覽器IE
        public static string _UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36";

        public static CookieContainer cookieC = new CookieContainer();

        public static string cookiestr = "";

        /// <summary>
        /// Get請求
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetHtml(string url)
        {
            //處理HttpWebRequest訪問https有安全證書的問題( 請求被中止: 未能創建 SSL/TLS 安全通道。)
            //ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
           
            //創建一個HTTP請求  
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.CookieContainer = cookieC;            
            request.Headers.Add("Cookie:" + cookiestr);
            
            //Get請求方式  
            request.Method = "GET";
            request.Headers.Add("Access-Control-Allow-Origin", "*");  
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
            request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
            request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9");
            request.KeepAlive = true;
            request.Host = "www.thaievisa.go.th";
            request.Referer = "https://www.thaievisa.go.th/Home/Login";
            
            //request.ContentType = "text/html; charset=utf-8";
            request.UserAgent = _UserAgent;


            String strValue = "";   //strValue爲http響應所返回的字符流
            HttpWebResponse response;
            try
            {
                //獲得響應流
                response = (HttpWebResponse)request.GetResponse();
                if (string.IsNullOrEmpty(cookiestr))
                {
                    cookiestr = request.CookieContainer.GetCookieHeader(request.RequestUri) + ";" + cookiestr;
                }
                request.Headers.Add("Cookie:" + cookiestr);
            }
            catch (WebException ex)
            {
                response = ex.Response as HttpWebResponse;
            }
            Stream sm = response.GetResponseStream();

            //使用了gzip壓縮流編碼時的處理
            var ce = response.ContentEncoding;
            if (ce.ToLower() == "gzip")
            {
                sm = new GZipStream(sm, CompressionMode.Decompress);
            }

            StreamReader streamReader = new StreamReader(sm, System.Text.Encoding.UTF8);
            strValue = streamReader.ReadToEnd();

            streamReader.Close();
            sm.Close();

            request.Abort();
            response.Close();

            return strValue;
        }
        /// <summary>
        /// Post請求
        /// </summary>
        /// <param name="url">請求的地址</param>
        /// <param name="data">提交數據</param>
        /// <returns></returns>
        public static string PostHtml(string url, string data = "")
        {
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

            //創建一個HTTP請求  
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.CookieContainer = cookieC;
            request.Headers.Add("Cookie:" + cookiestr);

            //Post請求方式  
            request.Method = "POST";
            request.Headers.Add("Access-Control-Allow-Origin", "*");            
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
            request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
            request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9");
            request.KeepAlive = true;
            request.Host = "www.thaievisa.go.th";
            request.Headers.Add("Origin", "https://www.thaievisa.go.th");
            request.Referer = "https://www.thaievisa.go.th/Home/Login";

            //內容類型
            request.ContentType = "application/x-www-form-urlencoded";

            request.ContentLength = data.Length;

            request.UserAgent = _UserAgent;


            byte[] payload;
            //將Json字符串轉化爲字節  
            payload = System.Text.Encoding.UTF8.GetBytes(data);
            //設置請求的ContentLength   
            request.ContentLength = payload.Length;
            //發送請求,獲得請求流  

            Stream writer;
            try
            {
                writer = request.GetRequestStream();//獲取用於寫入請求數據的Stream對象
            }
            catch (Exception)
            {
                writer = null;
                string msg = "連接服務器失敗!";
                return msg;
            }
            //將請求參數寫入流
            writer.Write(payload, 0, payload.Length);
            writer.Close(); //關閉請求流

            String strValue = "";   //strValue爲http響應所返回的字符流
            HttpWebResponse response;

            try
            {
                //獲得響應流
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = ex.Response as HttpWebResponse;
            }

            Stream s = response.GetResponseStream();

            //使用了gzip壓縮流編碼時的處理
            var ce = response.ContentEncoding;
            if (ce.ToLower() == "gzip")
            {
                s = new GZipStream(s, CompressionMode.Decompress);
            }

            StreamReader streamReader = new StreamReader(s, System.Text.Encoding.UTF8);
            strValue = streamReader.ReadToEnd();

            streamReader.Close();
            s.Close();

            request.Abort();
            response.Close();

            return strValue;    //返回Json數據
        }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章