• C# WebRequest WebClient Post请求 无乱码


    Web.Config

    <globalization  responseEncoding="gb2312"/>
    CS文件
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Net;
    using System.Text;
    using System.IO;
    using System.Xml;
    using System.Collections;
    using System.Diagnostics;
    
    namespace WebPortal
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                CoreProxy.Class1 c = new CoreProxy.Class1();
                c.test1();
            }
    
            protected void Button2_Click(object sender, EventArgs e)
            {
    
                webquerst1();
                
            }
    
            public void webquers2()
            {
    
                string html = null;
                string url = "http://china.alibaba.com/keyword/promotion.htm?catId=14";
                WebRequest req = WebRequest.Create(url);
                req.Method = "POST";
                WebResponse res = req.GetResponse();
                Stream receiveStream = res.GetResponseStream();
                Encoding encode = Encoding.GetEncoding("gb2312");
                StreamReader sr = new StreamReader(receiveStream, encode);
                char[] readbuffer = new char[256];
                int n = sr.Read(readbuffer, 0, 256);
                while (n > 0)
                {
                    string str = new string(readbuffer, 0, n);
                    html += str;
                    n = sr.Read(readbuffer, 0, 256);
                }
                System.Console.Write(html);
            }
    
    
            //成功!,利用WebRequest 一次Post提交XML内容
            public void webquerst1()
            {
                WebRequest request = WebRequest.Create("http://192.168.1.244/WebPortal/PortalHandler.ashx");
                // Set the Method property of the request to POST.
                request.Method = "POST";
                // Create POST data and convert it to a byte array.
    
                System.Xml.XmlDocument xmlpostdata = new System.Xml.XmlDocument();
                xmlpostdata.Load(Server.MapPath("XML/20097.xml"));
                string postData = HttpUtility.HtmlEncode(xmlpostdata.InnerXml); 
    
    
                //普通字符串内容
                //string postData = "你好,1232355 abdcde";
    
    
                byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                // Set the ContentType property of the WebRequest.
                request.ContentType = "application/x-www-form-urlencoded";
                // Set the ContentLength property of the WebRequest.
                request.ContentLength = byteArray.Length;
                // Get the request stream.
                Stream dataStream = request.GetRequestStream();
                
                // Write the data to the request stream.
                dataStream.Write(byteArray, 0, byteArray.Length);
                // Close the Stream object.
                dataStream.Close();
                // Get the response.
                WebResponse response = request.GetResponse();
                // Display the status.
                //Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                // Get the stream containing content returned by the server.
                dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.
                string responseFromServer = reader.ReadToEnd();
                // Display the content.
                //Console.WriteLine(responseFromServer);
                // Clean up the streams.
                reader.Close();
                dataStream.Close();
                response.Close();
            
            
            }
    
            protected void Button3_Click(object sender, EventArgs e)
            {
                WebClientPost();
            }
    
            //重点!! 成功 利用Webclient Post 按字段的方式提交每个字段的内容给服务器端 
            public void WebClientPost()
            {
                System.Xml.XmlDocument xmlpostdata = new System.Xml.XmlDocument();
                xmlpostdata.Load(Server.MapPath("XML/OrderClient.xml"));
                string OrderClient = HttpUtility.HtmlEncode(xmlpostdata.InnerXml);
    
                xmlpostdata.Load(Server.MapPath("XML/Order.xml"));
                string Order = HttpUtility.HtmlEncode(xmlpostdata.InnerXml);
    
                xmlpostdata.Load(Server.MapPath("XML/TargetOut.xml"));
                string TargetOut = HttpUtility.HtmlEncode(xmlpostdata.InnerXml);
    
                xmlpostdata.Load(Server.MapPath("XML/ArrayOfOrderDetail.xml"));
                string ArrayOfOrderDetail = HttpUtility.HtmlEncode(xmlpostdata.InnerXml); 
    
                System.Net.WebClient WebClientObj = new System.Net.WebClient();
                System.Collections.Specialized.NameValueCollection PostVars = new System.Collections.Specialized.NameValueCollection();
                
                
                //添加值域
                PostVars.Add("OrderClient", OrderClient);
                PostVars.Add("Order", Order);
                PostVars.Add("TargetOut", TargetOut);
                PostVars.Add("ArrayOfOrderDetail", ArrayOfOrderDetail);
    
                
                
                try
                {
                    byte[] byRemoteInfo = WebClientObj.UploadValues("http://192.168.1.244/WebPortal/PlaceOrder.ashx", "POST", PostVars);
                    //下面都没用啦,就上面一句话就可以了
                    string sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo);
                    //这是获取返回信息
                    Debug.WriteLine(sRemoteInfo);
                    
                }
                catch
                { } 
            }
    
    
            //未测试,使用WebClient 一次性提交POst
            public static string SendPostRequest(string url, string postString)
            {
                
                byte[] postData = Encoding.UTF8.GetBytes(postString);
    
                WebClient client = new WebClient();
                client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                client.Headers.Add("ContentLength", postData.Length.ToString());
    
                byte[] responseData = client.UploadData(url, "POST", postData);
                return Encoding.Default.GetString(responseData);
            }
    
            /// <summary>
            /// 这个是用WEbRequest 提交到WEbService 的例子
            /// </summary>
            /// <param name="URL"></param>
            /// <param name="MethodName"></param>
            /// <param name="Pars"></param>
            /// <returns></returns>
            public static XmlDocument QueryPostWebService(String URL, String MethodName, Hashtable Pars)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                SetWebRequest(request);
                byte[] data = EncodePars(Pars);
                WriteRequestData(request, data);
    
                return ReadXmlResponse(request.GetResponse());
            }
    
            private static void SetWebRequest(HttpWebRequest request)
            {
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Timeout = 10000;
            }
    
            private static void WriteRequestData(HttpWebRequest request, byte[] data)
            {
                request.ContentLength = data.Length;
                Stream writer = request.GetRequestStream();
                writer.Write(data, 0, data.Length);
                writer.Close();
            }
            private static byte[] EncodePars(Hashtable Pars)
            {
                return Encoding.UTF8.GetBytes(ParsToString(Pars));
            }
    
            private static String ParsToString(Hashtable Pars)
            {
                StringBuilder sb = new StringBuilder();
                foreach (string k in Pars.Keys)
                {
                    if (sb.Length > 0)
                    {
                        sb.Append("&");
                    }
                    sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));
                }
                return sb.ToString();
            }
    
            private static XmlDocument ReadXmlResponse(WebResponse response)
            {
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                String retXml = sr.ReadToEnd();
                sr.Close();
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(retXml);
                return doc;
            }
    
            private static void AddDelaration(XmlDocument doc)
            {
                XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
                doc.InsertBefore(decl, doc.DocumentElement);
            }
    
            protected void Button4_Click(object sender, EventArgs e)
            {
    
            } 
    
    
        }
    }

    ashx

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    
    using System.Diagnostics;
    using System.IO;
    
    using System.Xml;
    
    namespace WebPortal
    {
        /// <summary>
        /// $codebehindclassname$ 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        public class PortalHandler : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
    
                string testGet = context.Request["testGet"];
                string testPost = context.Request["testPost"];
                Debug.WriteLine(testGet);
                Debug.WriteLine(testPost);
                
                //一次性提交的方式
                //获得内容长度
                int len = context.Request.ContentLength;            
                //获得所有内容流
                StreamReader reader = new StreamReader(context.Request.InputStream);
                //读取内容
                string responseFromServer = reader.ReadToEnd();
                
                
                //字段提交Post方式
                string a1 = context.Request["A1"];
                string a2 = context.Request["A2"];
                string a3 = context.Request["A3"];
    
                //解析Html编码
                string re = HttpUtility.HtmlDecode(a1);
    
                XmlDocument xd = new XmlDocument();
                //加载XML
                xd.LoadXml(re);
    
    
                context.Response.ContentType = "text/plain";
    
                context.Response.Write(testGet);
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

     

    冯瑞涛
  • 相关阅读:
    Locust:简介和基本用法
    linux more less 用法
    Pytest测试用例之setup与teardown方法
    app测试之monkey
    理解yield以及和return的区别
    Python 数据驱动工具:DDT
    requests 使用 proxies 代理时ValueError: check_hostname requires server_hostname
    from urllib.parse import urlparse 使用
    linux 三剑客 使用总结 grep sed awk
    企查查和天眼查哪个好用
  • 原文地址:https://www.cnblogs.com/finehappy/p/1542641.html
Copyright © 2020-2023  润新知