zoukankan      html  css  js  c++  java
  • WebRequest之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;
    }
    }
    }
    }
    作者:KKcat
        
    个人博客:http://jinzhao.me/
        
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    求助:多个参数的存储过程
    经典回顾:哲学家进餐问题(The Dinning Philosophers Problem)
    杨辉三角
    开发公共课选修系统之二
    关于即时消息系统
    用户 'NT AUTHORITY/NETWORK SERVICE' 登录失败 的解决方法(转)
    细说反射API
    东莞哪家公司可以提供实习的机会?
    使用Gmail发送email时出现Must issue a STARTTLS command first错误!!
    Revolution
  • 原文地址:https://www.cnblogs.com/jinzhao/p/1654760.html
Copyright © 2011-2022 走看看