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;
服务端接收还是需要验证下,传输调通接口问题不大。