using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Net;
using
System.Net.Sockets;
using
System.Collections;
using
System.IO;
using
System.Text.RegularExpressions;
using
RE = System.Text.RegularExpressions.Regex;
using
System.Security.Cryptography.X509Certificates;
/***************************************************************************************************************************************************
* *
文件名:HttpProc.cs
* *
创建人:HeDaode
* *
日 期:2007.09.01
* *
描 述:实现HTTP协议中的GET、POST请求
* *
使 用:HttpProc.WebClient client = new HttpProc.WebClient();
client.Encoding = System.Text.Encoding.Default;//
默认编码方式,根据需要设置其他类型
client.OpenRead("http://www.baidu.com");//
普通get请求
MessageBox.Show(client.RespHtml);//
获取返回的网页源代码
client.DownloadFile("http://www.loopc.com/upload/163album.rar",@"C:/163album.rar");//
下载文件
client.OpenRead("http://passport.baidu.com/?login","username=zhangsan&password=123456");//
提交表单,此处是登录百度的示例
client.UploadFile("http://hiup.baidu.com/zhangsan/upload", @"file1=D:/1.mp3");//
上传文件
client.UploadFile("http://hiup.baidu.com/zhangsan/upload", "folder=myfolder&size=4003550",@"file1=D:/1.mp3");//
提交含文本域和文件域的表单
*****************************************************************************************************************************************************/
namespace
HttpProc
{
///<summary>
///
上传事件委托
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
public delegate void WebClientUploadEvent(object sender, HttpProc.UploadEventArgs e);
///<summary>
///
下载事件委托
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
public delegate void WebClientDownloadEvent(object sender, HttpProc.DownloadEventArgs e);
///<summary>
///
上传事件参数
///</summary>
public struct UploadEventArgs
{
///<summary>
///
上传数据总大小
///</summary>
public long totalBytes;
///<summary>
///
已发数据大小
///</summary>
public long bytesSent;
///<summary>
///
发送进度(0-1)
///</summary>
public double sendProgress;
///<summary>
///
发送速度Bytes/s
///</summary>
public double sendSpeed;
}
///<summary>
///
下载事件参数
///</summary>
public struct DownloadEventArgs
{
///<summary>
///
下载数据总大小
///</summary>
public long totalBytes;
///<summary>
///
已接收数据大小
///</summary>
public long bytesReceived;
///<summary>
///
接收数据进度(0-1)
///</summary>
public double ReceiveProgress;
///<summary>
///
当前缓冲区数据
///</summary>
public byte[] receivedBuffer;
///<summary>
///
接收速度Bytes/s
///</summary>
public double receiveSpeed;
}
///<summary>
///
实现向WEB服务器发送和接收数据
///</summary>
public class WebClient
{
private WebHeaderCollection requestHeaders, responseHeaders;
private TcpClient clientSocket;
private MemoryStream postStream;
private Encoding encoding = Encoding.Default;
private const string BOUNDARY = "--HEDAODE--";
private const int SEND_BUFFER_SIZE = 10245;
private const int RECEIVE_BUFFER_SIZE = 10245;
private string cookie = "";
private string respHtml = "";
private string strRequestHeaders = "";
private string strResponseHeaders = "";
private int statusCode = 0;
private bool isCanceled = false;
public event WebClientUploadEvent UploadProgressChanged;
public event WebClientDownloadEvent DownloadProgressChanged;
///<summary>
///
初始化WebClient类
///</summary>
public WebClient()
{
responseHeaders = new WebHeaderCollection();
requestHeaders = new WebHeaderCollection();
}
///<summary>
///
读取指定URL的文本
///</summary>
///<param name="URL">
请求的地址
</param>
///<returns>
服务器响应文本
</returns>
public string OpenRead(string URL)
{
requestHeaders.Add("Connection", "close");
SendRequestData(URL, "GET");
return GetHtml();
}
//
解决证书过期无法访问的问题