HttpWebRequest VS WebRequest VS WebClient VS HttpClient

WebRequest  Get

  #region  WebRequest  Get

        /// <summary>
        /// http://localhost:15325/api/ImitateHttp/WebRequestGet?Name0="NameLi"
        /// </summary>
        /// <param name="Name"></param>
        /// <returns></returns>
        [System.Web.Http.HttpGet]
        public string WebRequestGet(string Name0)
        {
            string strReturn = "";// objWeather.city;
            try
            {
                //参数url化
                String city = "徐州";
                //拼地址
                String apiUrl = "https://www.sojson.com/open/api/weather/json.shtml?city=" + city;
                WebRequest myWebRequest = WebRequest.Create(apiUrl);
                

                WebResponse myWebResponse = myWebRequest.GetResponse();
                Stream ReceiveStream = myWebResponse.GetResponseStream();
                string responseStr = "";
                if (ReceiveStream != null)
                {
                    StreamReader reader = new StreamReader(ReceiveStream, Encoding.UTF8);
                    responseStr = reader.ReadToEnd();
                    reader.Close();
                }
                myWebResponse.Close();
                
                RootClass objWeather = Newtonsoft.Json.JsonConvert.DeserializeObject<RootClass>(responseStr);
                strReturn = responseStr;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return strReturn;
        }

        #endregion

WebRequest  Post

 #region  WebRequest  Post

        /// <summary>
        /// http://localhost:15325/api/ImitateHttp/WebRequestPost
        /// 
        /// http://lbsyun.baidu.com/index.php?title=yingyan/api/v3/entity
        /// 
        /// {"AK":"SoEMqok1s5IKt5EDb5VARNr6WoKk74h2","service_id":1805228,"entity_name":"entityName","entity_desc":"entityDesc","province":"provinceJS","city":"cityXZ","sn":""}
        /// </summary>
        /// <param name="Name0"></param>
        /// <returns></returns>
        [System.Web.Http.HttpPost]
        public string WebRequestPost([FromBody]BaiduEntityRequest objRequest)
        {
            string strReturn = "";// objWeather.city;
            try
            {
                //请求路径
                string url = "http://yingyan.baidu.com/api/v3/entity/add";

                //定义request并设置request的路径
                WebRequest request = WebRequest.Create(url);
                request.Method = "post";

                // objRequest  可以不从请求给,测试的时候在这里写死 
                //BaiduEntityRequest objRequest = new BaiduEntityRequest();
                //objRequest.ak = "SoEMqok1s5IKt5EDb5VARNr6WoKk74h2";
                //objRequest.service_id = 1805228;
                //objRequest.entity_name = "entityName";
                //objRequest.entity_desc = "entityDesc";
                //objRequest.province = "provinceJS";
                //objRequest.city = "cityXZ";
                //objRequest.sn = "";


                //初始化request参数
                //string postData = "{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }";
                string postData = Newtonsoft.Json.JsonConvert.SerializeObject(objRequest);

                //设置参数的编码格式,解决中文乱码
                byte[] byteArray = Encoding.UTF8.GetBytes(postData);

                //设置request的MIME类型及内容长度
                request.ContentType = "application/json";
                request.ContentLength = byteArray.Length;

                //打开request字符流
                Stream dataStream = request.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();

                //定义response为前面的request响应
                WebResponse response = request.GetResponse();

                //获取相应的状态代码
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);

                //定义response字符流
                dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();//读取所有
                Console.WriteLine(responseFromServer);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return strReturn;
        }
        #endregion

 HttpWebRequest  Get

 #region  HttpWebRequest  Get

        /// <summary>
        /// http://localhost:15325/api/ImitateHttp/HttpWebRequestGet?Name1="NameLi"
        /// HttpWebRequest : WebRequest, ISerializable
        /// </summary>
        /// <param name="Name"></param>
        /// <returns></returns>
        [System.Web.Http.HttpGet]
        public string HttpWebRequestGet(string Name1)
        {
            string strReturn = "";// objWeather.city;
            try
            {


                //参数url化
                String city = "徐州";
                //拼地址
                String apiUrl = "https://www.sojson.com/open/api/weather/json.shtml?city=" + city;
                HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(apiUrl);


                HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
                Stream ReceiveStream = myWebResponse.GetResponseStream();
                string responseStr = "";
                if (ReceiveStream != null)
                {
                    StreamReader reader = new StreamReader(ReceiveStream, Encoding.UTF8);
                    responseStr = reader.ReadToEnd();
                    reader.Close();
                }
                myWebResponse.Close();
              
                RootClass objWeather = Newtonsoft.Json.JsonConvert.DeserializeObject<RootClass>(responseStr);
                strReturn = responseStr;


            }
            catch (Exception)
            {

                throw;
            }

            return strReturn;
        }
        #endregion

HttpWebRequest  Post

 #region   HttpWebRequest  Post

        /// <summary>
        /// http://localhost:15325/api/ImitateHttp/HttpWebRequestPost
        /// {"AK":"SoEMqok1s5IKt5EDb5VARNr6WoKk74h2","service_id":1805228,"entity_name":"entityName","entity_desc":"entityDesc","province":"provinceJS","city":"cityXZ","sn":""}
        /// </summary>
        /// <param name="objRequest"></param>
        /// <returns></returns>
         [System.Web.Http.HttpPost]
        public string HttpWebRequestPost([FromBody]BaiduEntityRequest objRequest)
        {
            string strReturn = "";// objWeather.city;   
        
             //data  
            string cookieStr = "51fd9f14fa7561b5";
            //string postData = string.Format("userid={0}&password={1}", "参数1", "参数2");
            string postData = Newtonsoft.Json.JsonConvert.SerializeObject(objRequest);
            byte[] data = Encoding.UTF8.GetBytes(postData);

            // Prepare web request...  
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://yingyan.baidu.com/api/v3/entity/add");
            request.Method = "POST";
            request.Referer = "http://yingyan.baidu.com/api/v3/entity/add";  
           // request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            request.ContentType = "application/json; charset=UTF-8";
            request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36";
            request.Host = "yingyan.baidu.com";  
            request.Headers.Add("Cookie", cookieStr);
            request.ContentLength = data.Length;
            Stream newStream = request.GetRequestStream();

            // Send the data.  
            newStream.Write(data, 0, data.Length);
            newStream.Close();

            // Get response  
            HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
            string content = reader.ReadToEnd();  //{"status":101,"message":"AK参数不存在"}
            Console.WriteLine(content);
            Console.ReadLine();

            return strReturn;
        }

 WebClient  Get

 #region  WebClient  Get

        /// <summary>
         ///  http://localhost:15325/api/ImitateHttp/WebClientGet?Name2="NameLi"
        /// </summary>
        /// <param name="Name2"></param>
        /// <returns></returns>
        [System.Web.Http.HttpGet]
        public string WebClientGet(string Name2)
        {
            string strReturn = "";
            //实例化    System.Net.WebClient
            WebClient webClient = new WebClient();

            //参数url化
            String city = "徐州";
            //拼地址
            String apiUrl = "https://www.sojson.com/open/api/weather/json.shtml?city=" + city;

            byte[] responseData = webClient.DownloadData(apiUrl);
            //释放
            webClient.Dispose();
            //处理返回数据(一般用json)
            string srcString = Encoding.UTF8.GetString(responseData);


            ////获取流数据  方式二
            //Stream webStream = webClient.OpenRead(apiUrl);
            //StreamReader reader = new StreamReader(webStream, Encoding.UTF8);
            //string srcString = reader.ReadToEnd();
            //reader.Close();
            //webStream.Close();

            strReturn = srcString;

            return strReturn;
        }

        #endregion

WebClient  Post

    #region  WebClient  Post

        /// <summary>
        /// 
        /// http://localhost:15325/api/ImitateHttp/WebClientPost
        /// {"AK":"SoEMqok1s5IKt5EDb5VARNr6WoKk74h2","service_id":1805228,"entity_name":"entityName","entity_desc":"entityDesc","province":"provinceJS","city":"cityXZ","sn":""}
        /// 
        /// </summary>
        /// <param name="objRequest"></param>
        /// <returns></returns>
        [System.Web.Http.HttpPost]
        public string WebClientPost([FromBody]BaiduEntityRequest objRequest){
            string strReturn = "";

            string URI = "http://yingyan.baidu.com/api/v3/entity/add";
            string postData = Newtonsoft.Json.JsonConvert.SerializeObject(objRequest);
            //实例化
            WebClient webClient = new WebClient();
            webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            webClient.Encoding = Encoding.UTF8;
            strReturn= webClient.UploadString(URI, postData);

            return strReturn;
        }

        #endregion

 HttpClient  Get 

 #region  HttpClient  Get    

        /// <summary>
        /// ok 
        /// 注意要到nuget先下载HttpClient   
        ///  System.Net.Http.HttpClient
        ///  http://localhost:15325/api/ImitateHttp/HttpClientGet?Name3="NameLi"
        /// 
        /// 精简写法 
        /// 
        /// </summary>
        /// <param name="Name3"></param>
        /// <returns></returns>
        [System.Web.Http.HttpGet]
        public string HttpClientGet(string Name3)
        {
            string strReturn = "";
            //参数url化
            String city = "徐州";
            //拼地址
            String apiUrl = "https://www.sojson.com/open/api/weather/json.shtml?city=" + city;
            HttpClient httpClient = new HttpClient();
            HttpResponseMessage response = httpClient.GetAsync(new Uri(apiUrl)).Result;
            strReturn = response.Content.ReadAsStringAsync().Result;

            return strReturn;
        }
        #endregion

 HttpClient  Get2

  #region   HttpClient  Get2
        /// <summary>
        ///  ok  有返回值  
        /// 标准写法 
        /// </summary>
        /// <returns></returns>
        [System.Web.Http.HttpGet]
        public string HttpClientGet2()
        {
            string strReturn = "";
            string uri="http://api.worldbank.org/countries?format=json";
            HttpClient httpClient = new HttpClient();
            // 创建一个异步GET请求,当请求返回时继续处理
            httpClient.GetAsync(uri).ContinueWith((requestTask) =>
            {
                HttpResponseMessage response = requestTask.Result;
                //确认响应成功,否则抛出异常
                response.EnsureSuccessStatusCode();
                //异步读取响应字符串
                response.Content.ReadAsStringAsync().ContinueWith(
                    (readTask) => { strReturn = readTask.Result; }
                    );
            }
                );
            return strReturn;
        }

        #endregion

HttpClient  Post
 

  #region  HttpClient  Post
        /// <summary>
        ///
        ///  http://localhost:15325/api/ImitateHttp/HttpClientPost
        ///
        ///  
        /// </summary>
        /// <param name="objRequest"></param>
        /// <returns></returns>
        [System.Web.Http.HttpPost]
        public string HttpClientPost([FromBody]osLoginRequest objRequest)
        {
            string strReturn = "";
            using (var httpClient = new HttpClient())
            {
                // 设置请求头信息
                httpClient.DefaultRequestHeaders.Add("Host", "www.oschina.net");
                httpClient.DefaultRequestHeaders.Add("Method", "Post");
                httpClient.DefaultRequestHeaders.Add("KeepAlive", "false");   // HTTP KeepAlive设为false,防止HTTP连接保持
                httpClient.DefaultRequestHeaders.Add("UserAgent",
                    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");

                // 构造POST参数
                HttpContent postContent = new FormUrlEncodedContent(new Dictionary<string, string>()
           {
              {"email", objRequest.email},
              {"pwd", EncryptPassword(objRequest.pwd, "SHA1")}
           });

                httpClient
                   .PostAsync("http://www.oschina.net/action/user/hash_login", postContent)
                   .ContinueWith(
                   (postTask) =>
                   {
                       HttpResponseMessage response = postTask.Result;

                       // 确认响应成功,否则抛出异常
                       response.EnsureSuccessStatusCode();

                       // 异步读取响应为字符串
                       response.Content.ReadAsStringAsync().ContinueWith(
                           (readTask) => {
                               Console.WriteLine("响应网页内容:" + readTask.Result);
                               strReturn = readTask.Result;
                           });
                       Console.WriteLine("响应是否成功:" + response.IsSuccessStatusCode);

                       Console.WriteLine("响应头信息如下:\n");
                       var headers = response.Headers;
                       foreach (var header in headers)
                       {
                           Console.WriteLine("{0}: {1}", header.Key, string.Join("", header.Value.ToList()));
                       }
                   });
            }


            return strReturn;

        }


        // MD5或SHA1加密
        private static string EncryptPassword(string pwdStr, string pwdFormat)
        {
            string EncryptPassword = null;
            if ("SHA1".Equals(pwdFormat.ToUpper()))
            {
                EncryptPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(pwdStr, "SHA1");
            }
            else if ("MD5".Equals(pwdFormat.ToUpper()))
            {
                EncryptPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(pwdStr, "MD5");
            }
            else
            {
                EncryptPassword = pwdStr;
            }
            return EncryptPassword;
        }

        #endregion



猜你喜欢

转载自blog.csdn.net/wei198621/article/details/81218786
VS