您的位置:首页 > 产品设计 > UI/UE

C# WebRequest WebClient Post请求

2011-02-21 16:44 381 查看
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
;

}

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: