C# WebRequest WebClient 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 ;
}
}
}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值