本文实例讲述了c#中httpwebrequest的用法。分享给大家供大家参考。具体如下:
httpwebrequest类主要利用http 协议和服务器交互,通常是通过 get 和 post 两种方式来对数据进行获取和提交。下面对这两种方式进行一下说明:
get 方式:
get 方式通过在网络地址附加参数来完成数据的提交,比如在地址 //www.jb51.net/?hl=zh-cn 中,前面部分 //www.jb51.net表示数据提交的网址,后面部分 hl=zh-cn 表示附加的参数,其中 hl 表示一个键(key), zh-cn 表示这个键对应的值(value)。
程序代码如下:
使用 get 方式提交中文数据。
get 方式通过在网络地址中附加参数来完成数据提交,对于中文的编码,常用的有 gb2312 和 utf8 两种。
用 gb2312 方式编码访问的程序代码如下:
post 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和 get 方式一样,是类似于 hl=zh-cn&newwindow=1 这样的结构。
程序代码如下:
在上面的代码中,我们访问了 //www.jb51.net 的网址,分别以 get 和 post 方式提交了数据,并接收了返回的页面内容。然而,如果提交的参数中含有中文,那么这样的处理是不够的,需要对其进行编码,让对方网站能够识别。
使用 post 方式提交中文数据
post 方式通过在页面内容中填写参数的方法来完成数据的提交,由于提交的参数中可以说明使用的编码方式,所以理论上能获得更大的兼容性。
用 gb2312 方式编码访问的程序代码如下:
string html = new streamreader(wrp.getresponsestream(), encoding.getencoding("gb2312")).readtoend();
try
{
wrt.getresponse().close();
}
catch (webexception ex)
{
throw ex;
}
cookie = wrp.headers.get("set-cookie");
return html;
}
public static string gethtml(string url, string postdata, string cookie, out string header, string server)
{
return gethtml(server, url, postdata, cookie, out header);
}
public static string gethtml(string server, string url, string postdata, string cookie, out string header)
{
byte[] byterequest = encoding.getencoding("gb2312").getbytes(postdata);
return gethtml(server, url, byterequest, cookie, out header);
}
public static string gethtml(string server, string url, byte[] byterequest, string cookie, out string header)
{
byte[] bytes = gethtmlbybytes(server, url, byterequest, cookie, out header);
stream getstream = new memorystream(bytes);
streamreader streamreader = new streamreader(getstream, encoding.getencoding("gb2312"));
string getstring = streamreader.readtoend();
streamreader.close();
getstream.close();
return getstring;
}
/// <summary>
/// post模式浏览
/// </summary>
/// <param name="server">服务器地址 </param>
/// <param name="url">网址 </param>
/// <param name="byterequest">流 </param>
/// <param name="cookie">cookie </param>
/// <param name="header">句柄 </param>
/// <returns> </returns>
public static byte[] gethtmlbybytes(string server, string url, byte[] byterequest, string cookie, out string header)
{
long contentlength;
httpwebrequest httpwebrequest;
httpwebresponse webresponse;
stream getstream;
httpwebrequest = (httpwebrequest)httpwebrequest.create(url);
cookiecontainer co = new cookiecontainer();
co.setcookies(new uri(server), cookie);
httpwebrequest.cookiecontainer = co;
httpwebrequest.contenttype = "application/x-www-form-urlencoded";
httpwebrequest.accept =
"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
httpwebrequest.referer = server;
httpwebrequest.useragent =
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; maxthon; .net clr 1.1.4322)";
httpwebrequest.method = "post";
httpwebrequest.contentlength = byterequest.length;
stream stream;
stream = httpwebrequest.getrequeststream();
stream.write(byterequest, 0, byterequest.length);
stream.close();
webresponse = (httpwebresponse)httpwebrequest.getresponse();
header = webresponse.headers.tostring();
getstream = webresponse.getresponsestream();
contentlength = webresponse.contentlength;
byte[] outbytes = new byte[contentlength];
outbytes = readfully(getstream);
getstream.close();
return outbytes;
}
public static byte[] readfully(stream stream)
{
byte[] buffer = new byte[128];
using (memorystream ms = new memorystream())
{
while (true)
{
int read = stream.read(buffer, 0, buffer.length);
if (read <= 0)
return ms.toarray();
ms.write(buffer, 0, read);
}
}
}
/// <summary>
/// get模式
/// </summary>
/// <param name="url">网址 </param>
/// <param name="cookie">cookies </param>
/// <param name="header">句柄 </param>
/// <param name="server">服务器 </param>
/// <param name="val">服务器 </param>
/// <returns> </returns>
public static string gethtml(string url, string cookie, out string header, string server)
{
return gethtml(url, cookie, out header, server, "");
}
/// <summary>
/// get模式浏览
/// </summary>
/// <param name="url">get网址 </param>
/// <param name="cookie">cookie </param>
/// <param name="header">句柄 </param>
/// <param name="server">服务器地址 </param>
/// <param name="val"> </param>
/// <returns> </returns>
public static string gethtml(string url, string cookie, out string header, string server, string val)
{
httpwebrequest httpwebrequest;
httpwebresponse webresponse;
stream getstream;
streamreader streamreader;
string getstring = "";
httpwebrequest = (httpwebrequest)httpwebrequest.create(url);
httpwebrequest.accept = "*/*";
httpwebrequest.referer = server;
cookiecontainer co = new cookiecontainer();
co.setcookies(new uri(server), cookie);
httpwebrequest.cookiecontainer = co;
httpwebrequest.useragent =
"mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; maxthon; .net clr 1.1.4322)";
httpwebrequest.method = "get";
webresponse = (httpwebresponse)httpwebrequest.getresponse();
header = webresponse.headers.tostring();
getstream = webresponse.getresponsestream();
streamreader = new streamreader(getstream, encoding.getencoding("gb2312"));
getstring = streamreader.readtoend();
streamreader.close();
getstream.close();
return getstring;
}
}
}
希望本文所述对大家的c#程序设计有所帮助。
如对本文有疑问, 点击进行留言回复!!
C# 对PDF文档加密、解密(基于Spire.Cloud.SDK for .NET)
Unity通用泛型单例设计模式(普通型和继承自MonoBehaviour)
网友评论