using System;
using System.Net;
using System.IO;
using System.Text;
//小偷类
public class Thief
{
public Thief()//初始化
{
}
//通过post方法远程获取一个页面;web:页面的路径;postData:post的数据信息
public static string Post(string Web, string postData)
{
string str = ""; //要返回的结果
postData = postData.Replace(" ", "%20");//替换空格
try
{
//获取URL并发送字串
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(Web);
//定义这个Stream是只是为了得到发送字串 经过编码之后得到的byte的长度。
//因为如果字符串中存在中文 使用postData.Length得到长度和编码之后的长度是不一样的
Stream myStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(myStream, Encoding.Default);//用默认编码 得到Stream
myStreamWriter.Write(postData);
myStreamWriter.Flush();
long len = myStream.Length;//目的完成
myStreamWriter.Close();//关闭流
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";//请求的类型
myHttpWebRequest.ContentLength = len;//长度
myHttpWebRequest.Method = "POST";//方式
Stream newStream = myHttpWebRequest.GetRequestStream();//得到请求数据流
//编码使用Encoding.Default ,用它得到的中文不会出现乱码,特别是把request("")得到的值写入sql数据库的时候
myStreamWriter = new StreamWriter(newStream, Encoding.Default);
myStreamWriter.Write(postData);
myStreamWriter.Close();
//获取本次的回馈,先创建接收回馈的类HTTPWEBRESPONSE
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
//创建接收回馈的字节流类
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
Encoding encode = System.Text.Encoding.Default;//默认编码
StreamReader readStream = new StreamReader(receiveStream, encode);
str = readStream.ReadToEnd();//读出返回字符串
readStream.Close();
myHttpWebResponse.Close();//关闭资源
return str;
}
catch (Exception e)
{
throw e;
}
}
//对url进行编码;url:请求的路径;enc:编码格式
private static string UrlEncode(string url, Encoding enc)
{
byte[] bs = enc.GetBytes(url);//得到字节表示的数组
StringBuilder sb = new StringBuilder();//用于返回结果
for (int i = 0; i < bs.Length; i++)
{
if (bs[i] < 128)//asc码在128以下,直接添加
sb.Append((char)bs[i]);
else
{
//以格式化好的样式添加
sb.Append("%" + bs[i++].ToString("x").PadLeft(2, '0'));
sb.Append("%" + bs[i].ToString("x").PadLeft(2, '0'));
}
}
return sb.ToString();
}
//通过get方法远程获取一个页面;url:要获取页面的路径;enc:编码方式
public static string Get(string url, Encoding enc)
{
string tempurl = UrlEncode(url, enc);//对url进行编码
HttpWebRequest webr = (HttpWebRequest)WebRequest.Create(tempurl);//创建请求
HttpWebResponse wb = (HttpWebResponse)webr.GetResponse();
Stream sr = wb.GetResponseStream();//得到返回数据流
StreamReader sr1 = new StreamReader(sr, enc);//用于读取数据流的内容
string zz = sr1.ReadToEnd();//读取完成
sr1.Close();
wb.Close();//关闭
return zz;
}
//以指定gb2312编码的方式,通过get方法远程获取一个页面;url:要获取页面的路径
public static string Get(string url)
{
Encoding enc = Encoding.GetEncoding("gb2312");
return Get(UrlEncode(url, enc), enc);
}
}