`
terryfeng
  • 浏览: 504038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 

分享到:
评论

相关推荐

    C#实现通过HttpWebRequest发送POST请求实现网站自动登陆

    本文将详细介绍如何使用C#中的`HttpWebRequest`来发送POST请求,并实现网站的自动登录。 #### 发送POST请求的基本步骤 1. **创建HttpRequest对象**:首先需要创建一个`HttpWebRequest`对象,并设置其URL地址。 2. ...

    WebClient与WebRequest以及HttpWebRequest 的关系

    C# sliverlight 中 WebClient与WebRequest以及HttpWebRequest 的关系

    C#中HttpWebRequest、WebClient、HttpClient的使用详解

    使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用...

    C#中WebClient实现文件下载

    在C#编程中,WebClient类提供了一种简单的方式来实现文件下载。WebClient是一个高度封装的网络通信类,主要用于HTTP协议交互,包括上传和下载数据。以下是对标题和描述中涉及知识点的详细解释: 1. **WebClient下载...

    C# 后台请求接口的方法(GET,POST)

    根据给定的文件信息,我们可以总结出以下关于C#后台请求接口的方法(GET, POST)的知识点: ### C#后台请求接口方法概述 在Web开发过程中,前后端之间的数据交互非常关键,通常会使用HTTP协议中的GET和POST两种...

    Unity 中通过UnityWebRequest POST传JSON格式的参数请求数据。

    Unity 中通过UnityWebRequest 以POST形式传JSON格式(键值对格式)的参数请求数据。

    c# 使用WebRequest实现多文件上传.docx

    "C# 使用 WebRequest 实现多文件上传" C# 使用 WebRequest 实现多文件上传是.NET Framework 中的一种常见的网络编程技术。通过使用 WebRequest 类,可以实现 HTTP 请求和响应,包括多文件上传。在本篇文章中,我们...

    C#实现发送简单HTTP请求的方法

    除了上述基本的GET请求,C#还支持POST请求,常用于向服务器提交数据。要发送POST请求,你需要设置WebRequest对象的一些额外属性,例如: ```csharp req.Method = "POST"; req.ContentType = "application/x-...

    winform GET请求和POST请求

    POST请求则更复杂一些,它允许在请求正文中携带大量数据,这些数据对用户是不可见的,适合发送敏感信息。在Winform中,可以使用`HttpWebRequest`类创建POST请求,需要设置Content-Type头并提供请求正文: ```csharp...

    C# 实现HTTPS协议POST数据到接口.rar

    本示例聚焦于使用C#语言实现HTTPS协议下的POST请求,这在Web服务、API调用以及数据传输中非常常见。HTTPS提供了一种安全的方式,通过加密的数据传输来保护敏感信息,如用户登录凭证或交易数据。 首先,让我们了解...

    C#使用HttpPost请求调用WebService的方法

    C# 使用 HttpPost 请求调用 WebService 的方法 C# 使用 HttpPost 请求调用 WebService 的方法是一种常用的技术,能够帮助开发者快速实现 WebService 的调用。下面将详细介绍 C# 使用 HttpPost 请求调用 WebService ...

    c# httpwebrequest调用webservice demo

    - **设置请求属性**:设置请求方法为`POST`,并指定Content-Type为`application/soap+xml;charset=utf-8`。 - **写入请求流**:将SOAP报文写入请求流中。 ##### 2.3 接收响应 最后,从服务器接收响应,并将其转换为...

    C# 以Post方式提交数据

    以下将详细解析如何使用C#实现POST请求,包括构造请求、设置参数、发送数据及处理响应。 ### C# POST请求的基本流程 1. **创建HTTP Web请求对象**:首先,需要创建一个`HttpWebRequest`对象,这可以通过调用`...

    C#WEB用户令牌TOKEN验证防止HTTPGETPOST等提交

    C# Web用户令牌(Token)验证是一种常见的方式,用于防止未经授权的HTTP请求,如GET和POST,确保数据的安全传输。本技术介绍将深入探讨如何使用C#实现令牌验证机制,并结合Nginx集群与SSL证书来增强WebAPI的安全性。...

    c# Post提交图片

    在C#中,我们可以使用`System.Net`命名空间下的`HttpWebRequest`类来创建和发送POST请求。下面详细介绍具体的步骤和技术要点。 #### 二、准备工作 1. **引用必要的命名空间**: ```csharp using System; using ...

    C#通过post提交json字符串

    ### C#通过POST提交JSON字符串知识点详解 #### 一、知识点概述 在现代Web开发中,前后端分离架构越来越流行,后端主要负责处理业务逻辑和数据存储,前端则负责展示逻辑。在这种模式下,前后端之间的数据交换通常...

    C# asp.net http HttpWebRequest模拟浏览器请求下载文件到本地.txt

    C# asp.net http HttpWebRequest模拟浏览器请求下载文件到本地

    C# send post&get

    ### C# 发送 POST 和 GET 请求的实现方法 在 C# 开发中,发送 HTTP 请求(包括 GET 和 POST)是常见的需求之一。本篇文章将基于提供的文件内容介绍如何使用 C# 来发送这两种类型的请求,并获取服务器返回的数据。 ...

    HttpPostGet请求工具(C#)

    本篇主要介绍C#中实现HttpPost和HttpGet请求的相关知识点,并结合"HttpPostGet请求工具"的示例进行深入解析。 首先,我们来看HttpPost请求。HttpPost是一种HTTP请求方法,常用于向服务器提交数据,特别是在表单提交...

    C#后台访问url请求结果

    ### C#后台访问URL请求结果知识点详解 #### 一、函数功能概述 本文将详细介绍一个在C#中用于后台访问URL并获取响应结果的方法:`GetURLResult`。该方法支持HTTP请求中的两种常见方法——GET和POST,并允许指定数据...

Global site tag (gtag.js) - Google Analytics