最新Http 协议数据传输.doc

上传人:1595****071 文档编号:33836012 上传时间:2022-08-12 格式:DOC 页数:47 大小:180KB
返回 下载 相关 举报
最新Http 协议数据传输.doc_第1页
第1页 / 共47页
最新Http 协议数据传输.doc_第2页
第2页 / 共47页
点击查看更多>>
资源描述

《最新Http 协议数据传输.doc》由会员分享,可在线阅读,更多相关《最新Http 协议数据传输.doc(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品资料Http 协议数据传输.1using 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

2、;/* *文件名:HttpProc.cs* *创建人:HeDaode* *日 期:2007.09.01* *描 述:实现HTTP协议中的GET、POST请求* *使 用:HttpProc.WebClient client = new HttpProc.WebClient(); client.Encoding = System.Text.Encoding.Default;/默认编码方式,根据需要设置其他类型 client.OpenRead(普通get请求 MessageBox.Show(client.RespHtml);/获取返回的网页源代码 client.DownloadFile(下载文件 c

3、lient.OpenRead(提交表单,此处是登录百度的示例 client.UploadFile(, file1=D:1.mp3);/上传文件 client.UploadFile(, folder=myfolder&size=4003550,file1=D:1.mp3);/提交含文本域和文件域的表单*/namespace HttpProc / /上传事件委托 / / / public delegate void WebClientUploadEvent(object sender, HttpProc.UploadEventArgs e); / /下载事件委托 / / / public dele

4、gate void WebClientDownloadEvent(object sender, HttpProc.DownloadEventArgs e); / /上传事件参数 / public struct UploadEventArgs / /上传数据总大小 / public long totalBytes; / /已发数据大小 / public long bytesSent; / /发送进度(0-1) / public double sendProgress; / /发送速度Bytes/s / public double sendSpeed; / /下载事件参数 / public str

5、uct DownloadEventArgs / /下载数据总大小 / public long totalBytes; / /已接收数据大小 / public long bytesReceived; / /接收数据进度(0-1) / public double ReceiveProgress; / /当前缓冲区数据 / public byte receivedBuffer; / /接收速度Bytes/s / public double receiveSpeed; / /实现向WEB服务器发送和接收数据 / public class WebClient private WebHeaderColle

6、ction 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 c

7、ookie = ; 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; / /初始化We

8、bClient类 / public WebClient() responseHeaders = new WebHeaderCollection(); requestHeaders = new WebHeaderCollection(); / /读取指定URL的文本 / /请求的地址 /服务器响应文本 public string OpenRead(string URL) requestHeaders.Add(Connection, close); SendRequestData(URL, GET); return GetHtml(); /解决证书过期无法访问的问题 class CertPolic

9、y : ICertificatePolicy public bool CheckValidationResult(ServicePoint srvpt, X509Certificate cert, WebRequest req, int certprb) return true; / /采用https协议访问网络 / /url地址 /发送的数据 / public string OpenReadWithHttps(string URL,string strPostdata) ServicePointManager.CertificatePolicy = new CertPolicy(); Htt

10、pWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.CookieContainer = new CookieContainer(); request.Method = POST; request.Accept = */*; request.ContentType=application/x-www-form-urlencoded; byte buffer = this.encoding.GetBytes(strPostdata); request.ContentLength = buffer.Length;

11、 request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), encoding); this.respHtml = reader.ReadToEnd(); foreach (System.Net.Cookie ck in response.Cookies) this.

12、cookie += ck.Name + = + ck.Value + ; reader.Close(); return respHtml; / /读取指定URL的文本 / /请求的地址 /向服务器发送的文本数据 /服务器响应文本 public string OpenRead(string URL, string postData) byte sendBytes = encoding.GetBytes(postData); postStream = new MemoryStream(); postStream.Write(sendBytes, 0, sendBytes.Length); requ

13、estHeaders.Add(Content-Length, postStream.Length.ToString(); requestHeaders.Add(Content-Type, application/x-www-form-urlencoded); requestHeaders.Add(Connection, close); SendRequestData(URL, POST); return GetHtml(); / /读取指定URL的流 / /请求的地址 /向服务器发送的数据 /服务器响应流 public Stream GetStream(string URL, string p

14、ostData) byte sendBytes = encoding.GetBytes(postData); postStream = new MemoryStream(); postStream.Write(sendBytes, 0, sendBytes.Length); requestHeaders.Add(Content-Length, postStream.Length.ToString(); requestHeaders.Add(Content-Type, application/x-www-form-urlencoded); requestHeaders.Add(Connectio

15、n, close); SendRequestData(URL, POST); MemoryStream ms = new MemoryStream(); SaveNetworkStream(ms); return ms; / /上传文件到服务器 / /请求的地址 /文件域(格式如:file1=C:test.mp3&file2=C:test.jpg) /服务器响应文本 public string UploadFile(string URL, string fileField) return UploadFile(URL, , fileField); / /上传文件和数据到服务器 / /请求地址

16、/文本域(格式为:name1=value1&name2=value2) /文件域(格式如:file1=C:test.mp3&file2=C:test.jpg) /服务器响应文本 public string UploadFile(string URL, string textField, string fileField) postStream = new MemoryStream(); if (textField != & fileField != ) WriteTextField(textField); WriteFileField(fileField); else if (fileFiel

17、d != ) WriteFileField(fileField); else if (textField != ) WriteTextField(textField); else throw new Exception(文本域和文件域不能同时为空。); /写入结束标记 byte buffer = encoding.GetBytes(- + BOUNDARY + -rn); postStream.Write(buffer, 0, buffer.Length); /添加请求标头 requestHeaders.Add(Content-Length, postStream.Length.ToStrin

18、g(); requestHeaders.Add(Content-Type, multipart/form-data; boundary= + BOUNDARY); requestHeaders.Add(Connection, Keep-Alive); /发送请求数据 SendRequestData(URL, POST, true); /返回响应文本 return GetHtml(); / /分析文本域,添加到请求流 / /文本域 private void WriteTextField(string textField) string strArr = RE.Split(textField, &

19、); textField = ; foreach (string var in strArr) Match M = RE.Match(var, (=+)=(.+); textField += - + BOUNDARY + rn; textField += Content-Disposition: form-data; name= + M.Groups1.Value + rnrn + M.Groups2.Value + rn; byte buffer = encoding.GetBytes(textField); postStream.Write(buffer, 0, buffer.Length

20、); / /分析文件域,添加到请求流 / /文件域 private void WriteFileField(string fileField) string filePath = ; int count = 0; string strArr = RE.Split(fileField, &); foreach (string var in strArr) Match M = RE.Match(var, (=+)=(.+); filePath = M.Groups2.Value; fileField = - + BOUNDARY + rn; fileField += Content-Disposi

21、tion: form-data; name= + M.Groups1.Value + ; filename= + Path.GetFileName(filePath) + rn; fileField += Content-Type: image/jpegrnrn; byte buffer = encoding.GetBytes(fileField); postStream.Write(buffer, 0, buffer.Length); /添加文件数据 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read

22、); buffer = new byte50000; do count = fs.Read(buffer, 0, buffer.Length); postStream.Write(buffer, 0, count); while (count 0); fs.Close(); fs.Dispose(); fs = null; buffer = encoding.GetBytes(rn); postStream.Write(buffer, 0, buffer.Length); / /从指定URL下载数据流 / /请求地址 /数据流 public Stream DownloadData(string

23、 URL) requestHeaders.Add(Connection, close); SendRequestData(URL, GET); MemoryStream ms = new MemoryStream(); SaveNetworkStream(ms, true); return ms; / /从指定URL下载文件 / /文件URL地址 /文件保存路径,含文件名(如:C:test.jpg) public void DownloadFile(string URL, string fileName) requestHeaders.Add(Connection, close); SendR

24、equestData(URL, GET); FileStream fs = new FileStream(fileName, FileMode.Create); SaveNetworkStream(fs, true); fs.Close(); fs = null; / /向服务器发送请求 / /请求地址 /POST或GET /是否显示上传进度 private void SendRequestData(string URL, string method, bool showProgress) clientSocket = new TcpClient(); Uri URI = new Uri(UR

25、L); clientSocket.Connect(URI.Host, URI.Port); requestHeaders.Add(Host, URI.Host); byte request = GetRequestHeaders(method + + URI.PathAndQuery + HTTP/1.1); clientSocket.Client.Send(request); /若有实体内容就发送它 if (postStream != null) byte buffer = new byteSEND_BUFFER_SIZE; int count = 0; Stream sm = client

26、Socket.GetStream(); postStream.Position = 0; UploadEventArgs e = new UploadEventArgs(); e.totalBytes = postStream.Length; System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();/计时器 timer.Start(); do /如果取消就推出 if (isCanceled) break; /读取要发送的数据 count = postStream.Read(buffer, 0, buffer

27、.Length); /发送到服务器 sm.Write(buffer, 0, count); /是否显示进度 if (showProgress) /触发事件 e.bytesSent += count; e.sendProgress = (double)e.bytesSent / (double)e.totalBytes; double t = timer.ElapsedMilliseconds / 1000; t = t 0); timer.Stop(); postStream.Close(); /postStream.Dispose(); postStream = null; /end if

28、/ /向服务器发送请求 / /请求URL地址 /POST或GET private void SendRequestData(string URL, string method) SendRequestData(URL, method, false); / /获取请求头字节数组 / /POST或GET请求 /请求头字节数组 private byte GetRequestHeaders(string request) requestHeaders.Add(Accept, */*); requestHeaders.Add(Accept-Language, zh-cn); requestHeaders.Add(User-Agent, Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁