千家信息网

C#的http协议的网络编程

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Colle
千家信息网最后更新 2024年11月11日C#的http协议的网络编程

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

using System.Net;

using System.IO;


namespace www.xinduofen.cn

{

///

/// C#与http服务器端进行对接的工具类

///

class HttpWebTool

{

///

/// 用于缓存服务器端传输到客户端的SESSIONID或者JSESSIONID

///

private Cookie sessionidCookie = null;

///

/// 从HttpWebServer端获取数据(使用的是"post"方式)

///

/// 请求网址

/// 请求参数集合,无需参数时传入null值

/// 请求cookie集合,无需cookie时传入null值

/// 返回请求结果字符串,返回为null代表请求失败

public String getDatafromHttpWebServer(String url, Hashtable data,CookieCollection cookies)

{

String result = null;


if (string.IsNullOrEmpty(url))

{

return null;//传入参数异常

}

byte[] data_stream = null;//将要向服务器传输的数据流内容

if (data != null && data.Count > 0)

{

string transportData = "";//将要向服务器传输的字符串内容

foreach (DictionaryEntry de in data)

{

transportData = transportData + de.Key.ToString() + "=" + de.Value.ToString() + "&";//解调出键值对数据

}

transportData = transportData.TrimEnd('&');//去除字符串尾部的 &

if (!string.IsNullOrEmpty(transportData))

{

data_stream = Encoding.UTF8.GetBytes(transportData);//将上传字符串数据打包成数据流

}

}



try

{

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);

//请求方式

req.Method = "POST";

//声明客户端只接收txt类型的内容

req.Accept = "text/plain";

//以键值对形式向服务器传递参数

req.ContentType = "application/x-www-form-urlencoded";

//设置cookie盒子(客户端请求的cookie和服务器端返回的cookie就放在此盒子中)

CookieContainer cookieContainer = new CookieContainer();

if (sessionidCookie != null && !string.IsNullOrEmpty(sessionidCookie.Domain))

{

cookieContainer.Add(sessionidCookie);

}

if (cookies!=null)

{

cookieContainer.Add(cookies);//添加调用者传入的cookie集合

}

req.CookieContainer = cookieContainer;

if (data_stream != null && data_stream.Length > 0)

{

//请求数据流的长度

req.ContentLength = data_stream.Length;

using (Stream requestStream = req.GetRequestStream()) {

//写入请求实体流

requestStream.Write(data_stream, 0, data_stream.Length);

}

}

//接收返回值

using(HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse()){

using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8))

{

result = reader.ReadToEnd().Trim();

}

if (myResponse.Cookies["SESSIONID"] != null)

{

sessionidCookie = myResponse.Cookies["SESSIONID"];

}

else

{

if (myResponse.Cookies["JSESSIONID"] != null)

{

sessionidCookie = myResponse.Cookies["JSESSIONID"];

}

}

}

}catch(Exception){

Console.WriteLine("请查看传入参数是否正确或者服务器是否关闭");

}


return result;

}

///

/// 获得参数data的消息数据流,以"\r\n"结尾

///

/// 请求参数集合,无需参数时传入null值

/// 消息分隔符

/// 返回参数data的数据流,返回为空代表获得失败

private byte[] getParameterBytes(Hashtable data, String boundary)

{

byte[] parameterBytes = null;


//如果有请求参数

if (data != null && data.Count > 0)

{

string parameterStr = "";

foreach (DictionaryEntry de in data)

{

parameterStr += "--" + boundary;

parameterStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"";

parameterStr += "\r\n" + "Content-Type: text/plain; charset=UTF-8";

parameterStr += "\r\n\r\n" + de.Value.ToString();

parameterStr += "\r\n";

}

if (!string.IsNullOrEmpty(parameterStr))

{

parameterBytes = Encoding.UTF8.GetBytes(parameterStr);//将上传字符串数据打包成数据流

}

}


return parameterBytes;

}

///

/// 获得上传文件的消息头部分字符流,以"\r\n\r\n"结尾

///

/// 上传文件《控件名,上传文件的保存位置(包括"文件名"."扩展名")》

/// 消息分隔符

/// 返回上传文件的消息头部分字符流,返回会为null代表获得失败

private byte[] getUploadFileDeclareBytes(DictionaryEntry de, String boundary)

{

byte[] uploadFileDeclareBytes = null;


//上传文件的消息头描述部分

string uploadFileDeclareStr = "";

uploadFileDeclareStr += "--" + boundary;

uploadFileDeclareStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"; filename=\"" + de.Value.ToString() + "\"";

uploadFileDeclareStr += "\r\n" + "Content-Type: application/octet-stream";

uploadFileDeclareStr += "\r\n\r\n";

if (!string.IsNullOrEmpty(uploadFileDeclareStr))

{

uploadFileDeclareBytes = Encoding.UTF8.GetBytes(uploadFileDeclareStr);//将上传字符串数据打包成数据流

}



return uploadFileDeclareBytes;

}



}

}

内容所有权属于越康体育,(专业研究体质测试仪,学生体质测试仪)

数据 参数 字符 数据流 服务器 服务 字符串 文件 消息 内容 代表 客户 传输 体质 分隔符 头部 客户端 方式 测试仪 盒子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库在邮政中的应用 网络技术咨询优点 怎么看网络安全等级 巴州佰纳软件开发有限公司 高新区服务器上门回收价格表 反恐安全网络安全活动总结 服务器调试费计入什么科目 嗨皮咳嗽服务器国际服怎么进 无法激活服务器暂时不可用请尝试 安仁学电脑软件开发培训中心 科技手抄报一张网络安全手抄报 常青慕尼黑再保险网络安全保险 软件开发说明文档 网络安全后市怎么样 无安全锁登录加密服务器 离服务器辐射源五米 手术分级目录数据库 时时网络技术梁良 苏州工控软件开发价钱是多少 服务器数据转移怎么设置 终端网络安全产品 云计算与云数据库 企业不同云服务器组网 网络安全越来越难 DB7是什么数据库 社区为企业安全提供服务器 健康云用的哪家服务器 通过外网ip管理服务器 数据库的可视化管理工具 会计软件开发的阶段包括什么
0