您的位置:首页 > 理论基础 > 计算机网络

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

2015-11-10 14:45 253 查看
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; //总是接受

}

}

}

服务端接收还是需要验证下,传输调通接口问题不大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: