• PostSubmitter~在WEB应用程序以外的其他程序里提交Web请求的类


    如果在WindowService等其他非Web应用里提交一个httpRequest,用这个类比较方便:

     PostSubmitter post=new PostSubmitter();

    post.Url="http://seeker.dice.com/jobsearch/servlet/JobSearch";
    post.PostItems.Add("op","100");
    post.PostItems.Add("rel_code","1102");
    post.PostItems.Add("FREE_TEXT","c# jobs");
    post.PostItems.Add("SEARCH","");
    post.Type=PostSubmitter.PostTypeEnum.Post;
    string result=post.Post();

    源码: 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Web;
    using System.Net;
    using System.Collections.Specialized;

    namespace YourNameSpace
    {
        
        /// <summary>
        
    /// Submits post data to a url.
        
    /// </summary>
        public class PostSubmitter
        {
            /// <summary>
            
    /// determines what type of post to perform.
            
    /// </summary>
            public enum PostTypeEnum
            {
                /// <summary>
                
    /// Does a get against the source.
                
    /// </summary>
                Get,
                /// <summary>
                
    /// Does a post against the source.
                
    /// </summary>
                Post
            }

            private string m_url = string.Empty;
            private NameValueCollection m_values = new NameValueCollection();
            private PostTypeEnum m_type = PostTypeEnum.Get;
            /// <summary>
            
    /// Default constructor.
            
    /// </summary>
            public PostSubmitter()
            {
            }


            /// <summary>
            
    /// Constructor that accepts a url as a parameter
            
    /// </summary>
            
    /// <param name="url">The url where the post will be submitted to.</param>
            public PostSubmitter(string url)
                : this()
            {
                m_url = url;
            }


            /// <summary>
            
    /// Constructor allowing the setting of the url and items to post.
            
    /// </summary>
            
    /// <param name="url">the url for the post.</param>
            
    /// <param name="values">The values for the post.</param>
            public PostSubmitter(string url, NameValueCollection values)
                : this(url)
            {
                m_values = values;
            }


            /// <summary>
            
    /// Gets or sets the url to submit the post to.
            
    /// </summary>
            public string Url
            {
                get
                {
                    return m_url;
                }
                set
                {
                    m_url = value;
                }
            }
            /// <summary>
            
    /// Gets or sets the name value collection of items to post.
            
    /// </summary>
            public NameValueCollection PostItems
            {
                get
                {
                    return m_values;
                }
                set
                {
                    m_values = value;
                }
            }
            /// <summary>
            
    /// Gets or sets the type of action to perform against the url.
            
    /// </summary>
            public PostTypeEnum Type
            {
                get
                {
                    return m_type;
                }
                set
                {
                    m_type = value;
                }
            }
            /// <summary>
            
    /// Posts the supplied data to specified url.
            
    /// </summary>
            
    /// <returns>a string containing the result of the post.</returns>
            public string Post()
            {
                StringBuilder parameters = new StringBuilder();
                for (int i = 0; i < m_values.Count; i++)
                {
                    EncodeAndAddItem(ref parameters, m_values.GetKey(i), m_values[i]);
                }
                string result = PostData(m_url, parameters.ToString());
                return result;
            }
            /// <summary>
            
    /// Posts the supplied data to specified url.
            
    /// </summary>
            
    /// <param name="url">The url to post to.</param>
            
    /// <returns>a string containing the result of the post.</returns>
            public string Post(string url)
            {
                m_url = url;
                return this.Post();
            }
            /// <summary>
            
    /// Posts the supplied data to specified url.
            
    /// </summary>
            
    /// <param name="url">The url to post to.</param>
            
    /// <param name="values">The values to post.</param>
            
    /// <returns>a string containing the result of the post.</returns>
            public string Post(string url, NameValueCollection values)
            {
                m_values = values;
                return this.Post(url);
            }
            /// <summary>
            
    /// Posts data to a specified url. Note that this assumes that you have already url encoded the post data.
            
    /// </summary>
            
    /// <param name="postData">The data to post.</param>
            
    /// <param name="url">the url to post to.</param>
            
    /// <returns>Returns the result of the post.</returns>
            private string PostData(string url, string postData)
            {
                HttpWebRequest request = null;
                if (m_type == PostTypeEnum.Post)
                {
                    Uri uri = new Uri(url);
                    request = (HttpWebRequest)WebRequest.Create(uri);
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = postData.Length;
                    using (Stream writeStream = request.GetRequestStream())
                    {
                        UTF8Encoding encoding = new UTF8Encoding();
                        byte[] bytes = encoding.GetBytes(postData);
                        writeStream.Write(bytes, 0, bytes.Length);
                    }
                }
                else
                {
                    Uri uri = new Uri(url + "?" + postData);
                    request = (HttpWebRequest)WebRequest.Create(uri);
                    request.Method = "GET";
                }
                string result = string.Empty;
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
                        {
                            result = readStream.ReadToEnd();
                        }
                    }
                }
                return result;
            }
            /// <summary>
            
    /// Encodes an item and ads it to the string.
            
    /// </summary>
            
    /// <param name="baseRequest">The previously encoded data.</param>
            
    /// <param name="dataItem">The data to encode.</param>
            
    /// <returns>A string containing the old data and the previously encoded data.</returns>
            private void EncodeAndAddItem(ref StringBuilder baseRequest, string key, string dataItem)
            {
                if (baseRequest == null)
                {
                    baseRequest = new StringBuilder();
                }
                if (baseRequest.Length != 0)
                {
                    baseRequest.Append("&");
                }
                baseRequest.Append(key);
                baseRequest.Append("=");
                baseRequest.Append(System.Web.HttpUtility.UrlEncode(dataItem));
            }
        }

    } 

    如果出现 The type or namespace name 'HttpUtility' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)这个错误,请添加System.Web引用到Reference. 这时你可能会发现找不到这个引用,右键点击项目,选择Properties, 如果 Target Framework是 ".Net Framework 4 Client",就改成 ".Net Framework 4". But beware this will close, reopen and rebuild your project (also if you have a web service references these will need to be refreshed)。

  • 相关阅读:
    网络安全课 06 【Euler、Fermat定理、Miller-Rabin 概率算法】
    网络安全课 05 【保密通信、秘钥分发】
    网络安全课 04 【双重、三重DES】
    状压DP【蓝桥杯 2019_C++_A T9】
    蓝桥杯 2019 C++ A 题解
    凯撒加密【加密+暴力破解+文本单词匹配】
    蓝桥杯 2018 C++ A 题解 【除7、10】
    rest_framework 分页三种
    rest_framework 序列化篇
    rest_framework 解析器(下 全局配置使用)
  • 原文地址:https://www.cnblogs.com/Isabella/p/2304362.html
Copyright © 2020-2023  润新知