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;
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值