post方法

///
        /// 通过post方式调用web方法
        ///

        ///
        ///
        ///
        public static string HttpPost(string Url, string postDataStr)  
        {  
            //HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);  
            //request.Method = "POST";  
            //request.ContentType = "application/x-www-form-urlencoded";  
            //request.ContentLength = postDataStr.Length;  
            //StreamWriter writer = new StreamWriter(request.GetRequestStream(),Encoding.ASCII);  
            //writer.Write(postDataStr);  
            //writer.Flush();  
            //HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
            //string encoding = response.ContentEncoding;  
            //if (encoding == null || encoding.Length < 1) {  
            // encoding = "UTF-8"; //默认编码  
            //}  
            //StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));  
            //string retString = reader.ReadToEnd();  
            //return retString;


            string postString = postDataStr;//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来  
            byte[] postData = Encoding.UTF8.GetBytes(postString);//编码,尤其是汉字,事先要看下抓取网页的编码方式  
            string url = Url;//地址  
            WebClient webClient = new WebClient();
            webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可  
            byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流  
            string srcString = Encoding.UTF8.GetString(responseData);//解码 
            return srcString;

        }


切记,post调用中,如若含有“+”号,传输过程中会转换为空格,原因没有具体深究,解决方案,把“+”号以“%2B”代替可解决

你可能感兴趣的:(winform)