• C#通过WebClient/HttpWebRequest实现http的post/get方法


    原文地址:http://www.cnblogs.com/shadowtale/p/3372735.html

    //body是要传递的参数,格式"roleId=1&uid=2"
    //post的cotentType填写:
    //"application/x-www-form-urlencoded"
    //soap填写:"text/xml; charset=utf-8"
        public static string PostHttp(string url, string body, string contentType)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    
            httpWebRequest.ContentType = contentType;
            httpWebRequest.Method = "POST";
            httpWebRequest.Timeout = 20000;
    
            byte[] btBodys = Encoding.UTF8.GetBytes(body);
            httpWebRequest.ContentLength = btBodys.Length;
            httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
    
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            string responseContent = streamReader.ReadToEnd();
    
            httpWebResponse.Close();
            streamReader.Close();
            httpWebRequest.Abort();
            httpWebResponse.Close();
    
            return responseContent;
        }
    POST方法(httpWebRequest)
    /// <summary>
            /// 通过WebClient类Post数据到远程地址,需要Basic认证;
            /// 调用端自己处理异常
            /// </summary>
            /// <param name="uri"></param>
            /// <param name="paramStr">name=张三&age=20</param>
            /// <param name="encoding">请先确认目标网页的编码方式</param>
            /// <param name="username"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password)
            {
                if (encoding == null)
                    encoding = Encoding.UTF8;
    
                string result = string.Empty;
    
                WebClient wc = new WebClient();
    
                // 采取POST方式必须加的Header
                wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
    
                byte[] postData = encoding.GetBytes(paramStr);
    
                if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
                {
                    wc.Credentials = GetCredentialCache(uri, username, password);
                    wc.Headers.Add("Authorization", GetAuthorization(username, password));
                }
    
                byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流
                return encoding.GetString(responseData);// 解码                  
            }
    
    POST方法(WebClient)
    POST方法(WebClient)
    public static string GetHttp(string url, HttpContext httpContext)
        {
            string queryString = "?";
    
            foreach (string key in httpContext.Request.QueryString.AllKeys)
            {
                queryString += key + "=" + httpContext.Request.QueryString[key] + "&";
            }
    
            queryString = queryString.Substring(0, queryString.Length - 1);
    
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);
    
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "GET";
            httpWebRequest.Timeout = 20000;
    
            //byte[] btBodys = Encoding.UTF8.GetBytes(body);
            //httpWebRequest.ContentLength = btBodys.Length;
            //httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
    
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            string responseContent = streamReader.ReadToEnd();
    
            httpWebResponse.Close();
            streamReader.Close();
    
            return responseContent;
        }
    Get方法(HttpWebRequest)
    /// <summary>
            /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;
            /// 调用端自己处理异常
            /// </summary>
            /// <param name="uri"></param>
            /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param>
            /// <param name="encoding">如果不知道具体的编码,传入null</param>
            /// <param name="username"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)
            {
                string result = string.Empty;
    
                WebRequest request = WebRequest.Create(new Uri(uri));
    
                if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
                {
                    request.Credentials = GetCredentialCache(uri, username, password);
                    request.Headers.Add("Authorization", GetAuthorization(username, password));
                }
    
                if (timeout > 0)
                    request.Timeout = timeout;
    
                WebResponse response = request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);
    
                result = sr.ReadToEnd();
    
                sr.Close();
                stream.Close();
    
                return result;
            }
    
            #region # 生成 Http Basic 访问凭证 #
    
            private static CredentialCache GetCredentialCache(string uri, string username, string password)
            {
                string authorization = string.Format("{0}:{1}", username, password);
    
                CredentialCache credCache = new CredentialCache();
                credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));
    
                return credCache;
            }
    
            private static string GetAuthorization(string username, string password)
            {
                string authorization = string.Format("{0}:{1}", username, password);
    
                return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));
            }
    
            #endregion
    basic验证的WebRequest/WebResponse
  • 相关阅读:
    微软Silverlight团队关于PDC会议发表官方补充声明(风云翻译版)
    《银光志Silverlight 3.0开发详解与最佳实践》发行第三版总销量过万册
    Silverlight医学PACS诊断分析管理系统【案例分享】
    微软PDC10与最后的恐慌者
    风云的银光志Silverlight4.0教程之与学会使用Frame控件
    WPF案例之生产线控制器管理系统
    WindowsPhone7 经典3D游戏《刺客信条》评测
    Silverlight4开发的炫酷企业网站整站(运行大量特效)
    微软Windows Phone7超越Android、iOS的五大优势
    as3 滤镜学习笔记
  • 原文地址:https://www.cnblogs.com/beipiaoxiaohuo/p/6268858.html
Copyright © 2020-2023  润新知