HttpWebResponse 传输IDictionary<string, string>[] parameter数组

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Data;
using System.Data;
using System.Configuration;
using System.Text;
using System.Net;




namespace NewShowInfomation
{
    public partial class AddArticle : System.Web.UI.Page
    {
        DataSet ds = new DataSet();//数据源
        Data.Common _common = new Data.Common();
        int top = 0;
        int siteid = 0;
        string fid = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            top = Convert.ToInt16(Request.QueryString["number"]);
            siteid = Convert.ToInt16(Request.QueryString["SiteId"]);
            fid = Convert.ToString(Request.QueryString["fid"]);
            this.Button1.Attributes.Add("onclick", "");
            if (fid == null)
                fid = "";
            if (top > 0 && siteid > 0 && siteid <= 6)//|| string.IsNullOrWhiteSpace(fid))) 
                initdata(top, siteid, fid);


            //这句话用来给Button1添加客户端事件。
        }
        private void initdata(int top, int siteid, string fid)
        {


            GetData dba = new GetData();
            ds = dba.GetArticleList(top, siteid, fid);
            if (ArticleList != null)
            {
                ArticleList.DataSource = ds;
                ArticleList.DataBind();
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if(this.Save())
                Response.AddHeader("Refresh", "0");


        }
        private bool Save()
        {
            string ids = "";
            string url = ConfigurationManager.AppSettings["APIurl"];            
            if (ds == null || ds.Tables.Count == 0)
                return false;
            DataTable dt = this.ds.Tables[0];
           // string content = string.Empty;
            IDictionary<string, string>[] parameter = new Dictionary<string, string>[dt.Rows.Count];
            for(int i=0;i<dt.Rows.Count;i++) 
            {
                DataRow row = dt.Rows[i];
                IDictionary<string, string> parameters = new Dictionary<string, string>();
                parameters.Add("SiteID", siteid.ToString());
                parameters.Add("KeyName", row["name"] == DBNull.Value ? "" : Convert.ToString(row["name"]));
                parameters.Add("Content", row["con"] == DBNull.Value ? "" : Uri.EscapeDataString(row["con"].ToString()));
                //parameters.Add("Content", row["con"] == DBNull.Value ? "" : Convert.ToString(row["con"]));
                parameters.Add("catname", row["cid"] == DBNull.Value ? "" : Convert.ToString(row["cid"]));//子分类
                parameters.Add("fidname", row["fid"] == DBNull.Value ? "" : Convert.ToString(row["fid"]));//父分类
                parameters.Add("Title", row["title"] == DBNull.Value ? "" : Convert.ToString(row["title"]));
                parameters.Add("Keyword", row["keywords"] == DBNull.Value ? "" : Convert.ToString(row["keywords"]));
                parameters.Add("Descriptions", row["description"] == DBNull.Value ? "" : Uri.EscapeDataString(row["description"].ToString()));
                // parameters.Add("Descriptions", row["description"] == DBNull.Value ? "" : Convert.ToString(row["description"]));
                parameters.Add("CreatDate", row["addtime"] == DBNull.Value ? "" : Convert.ToString(row["addtime"]));
                parameters.Add("OrtherID", row["id"] == DBNull.Value ? "0" : Convert.ToString(row["id"]));
                if (ids == "")
                    ids = Convert.ToString(row["id"]);
                else
                    ids += "," + Convert.ToString(row["id"]);
                parameter[i] = parameters;
            }
            lock (this)
            {  
                Encoding encoding = Encoding.GetEncoding("utf-8");
                try
                {
                    HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(url, parameter, null, null, encoding, null);
                    // int id = row["id"] == DBNull.Value ? 0 : Convert.ToInt32(row["id"]);
                    //  bool issuccess = ["iss"] == "true" ? true : false;
                    bool issuccess = false;
                    if (response.StatusCode.ToString() == "OK")
                        issuccess = true;
                    if (ids!="" && siteid > 0)
                    {
                        GetData dba = new GetData();
                        dba.UpdateStatus(ids, siteid, issuccess);
                    }
                }
                catch (Exception ex)
                {
                    _common.WriteLog(ex.ToString());
                    return false;
                }
            }
            return true;
        }
        //asp页面注册按钮命令
        protected void Button_Command(object sender, CommandEventArgs e)
        {


        }
    }

}

因为传输数据流比较大,都是汉字编码,所以本想通过这种一次传输多条数据,结果测试一次只有传输1条数据才能通。




using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;


namespace Data
{
   public  class HttpWebResponseUtility
    {
        private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
        /// <summary>   
        /// 创建GET方式的HTTP请求   
        /// </summary>   
        /// <param name="url">请求的URL</param>   
        /// <param name="timeout">请求的超时时间</param>   
        /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>   
        /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>   
        /// <returns></returns>   
        public static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieCollection cookies)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException("url");
            }
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "GET";
            request.UserAgent = DefaultUserAgent;
            if (!string.IsNullOrEmpty(userAgent))
            {
                request.UserAgent = userAgent;
            }
            if (timeout.HasValue)
            {
                request.Timeout = timeout.Value;
            }
            if (cookies != null)
            {
                request.CookieContainer = new CookieContainer();
                request.CookieContainer.Add(cookies);
            }
            return request.GetResponse() as HttpWebResponse;
        }
        /// <summary>   
        /// 创建POST方式的HTTP请求   
        /// </summary>   
        /// <param name="url">请求的URL</param>   
        /// <param name="parameters">随同请求POST的参数名称及参数值字典</param>   
        /// <param name="timeout">请求的超时时间</param>   
        /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>   
        /// <param name="requestEncoding">发送HTTP请求时所用的编码</param>   
        /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>   
        /// <returns></returns>   
        public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string>[] parameter, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
        {
            try
            {
                if (string.IsNullOrEmpty(url))
                {
                    throw new ArgumentNullException("url");
                }
                if (requestEncoding == null)
                {
                    throw new ArgumentNullException("requestEncoding");
                }
                HttpWebRequest request = null;
                //如果是发送HTTPS请求   
                if (url.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    request = WebRequest.Create(url) as HttpWebRequest;
                    request.ProtocolVersion = HttpVersion.Version10;
                }
                else
                {
                    request = WebRequest.Create(url) as HttpWebRequest;
                }
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";


                if (!string.IsNullOrEmpty(userAgent))
                {
                    request.UserAgent = userAgent;
                }
                else
                {
                    request.UserAgent = DefaultUserAgent;
                }


                if (timeout.HasValue)
                {
                    request.Timeout = timeout.Value;
                }
                if (cookies != null)
                {
                    request.CookieContainer = new CookieContainer();
                    request.CookieContainer.Add(cookies);
                }
                StringBuilder buffer = new StringBuilder();
                //如果需要POST数据   
                foreach (IDictionary<string, string> parameters in parameter)
                {
                    if (!(parameters == null))
                    {
                        int i = 0;
                        foreach (string key in parameters.Keys)
                        {
                            if (i > 0)
                            {
                                buffer.AppendFormat("&{0}={1}", key, parameters[key]);
                            }
                            else
                            {
                                buffer.AppendFormat("{0}={1}", key, parameters[key]);
                            }
                            i++;
                        }
                    }
                    byte[] data = requestEncoding.GetBytes(buffer.ToString());
                    using (Stream stream = request.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
                }
                return request.GetResponse() as HttpWebResponse;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            
        }


        private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true; //总是接受   
        }   
    }
}


最近用get,居然不会解析返回的response;

解析Response:
C#语言是解析http的stream数据流获取的。

 var weatherResponse= request.GetResponse() ;
            var weatherResponse= request.GetResponse() ;
            Stream weatherStream = weatherResponse.GetResponseStream();
            //读取数据流
            StreamReader weatherStreamReader = new StreamReader(weatherStream, System.Text.Encoding.Default);
            //读取数据
           string weatherHtml = weatherStreamReader.ReadToEnd();
            weatherStreamReader.Close();
            weatherStream.Close();
            weatherResponse.Close();
            //针对不同的网站查看html源文件
            return weatherHtml;


服务端接收还是需要验证下,传输调通接口问题不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用VB.Net中的HttpWebRequest和HttpWebResponse类来实现该请求。具体实现过程如下: ```vb.net Dim request As HttpWebRequest = CType(WebRequest.Create("http://10.168.1.137/RTService/service.asmx"), HttpWebRequest) request.Method = "POST" request.ContentType = "text/xml; charset=utf-8" request.Headers.Add("SOAPAction", "http://tempuri.org/SpcCheck") Dim xml As String = "<?xml version=""1.0"" encoding=""utf-8""?>" & _ "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " & _ "xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" " & _ "xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" & _ "<soap:Body>" & _ "<SpcCheck xmlns=""http://tempuri.org/"">" & _ "<dcs>" & _ "<DataCollection>" & _ "<BatchIDs>string</BatchIDs>" & _ "<WaferIDs>string</WaferIDs>" & _ "</DataCollection>" & _ "</dcs>" & _ "</SpcCheck>" & _ "</soap:Body>" & _ "</soap:Envelope>" Dim data As Byte() = Encoding.UTF8.GetBytes(xml) request.ContentLength = data.Length Using stream As Stream = request.GetRequestStream() stream.Write(data, 0, data.Length) End Using Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse) Dim reader As StreamReader = New StreamReader(response.GetResponseStream()) Dim result As String = reader.ReadToEnd() Console.WriteLine(result) ``` 这段代码发送了一个POST请求,将请求体设置为xml变量中的内容,然后从响应流中读取响应并输出。你需要将`10.168.1.137`替换为实际的IP地址,以及将`string`替换为实际的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值