1 把网络图片转化为Image,获取网络图片直接stream转化
private Image ImageFromWeb(String url )
{
//获取HttpWebRequest对象
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//获取返回流
WebResponse response = request.GetResponse();
//把流转化为图片
Image img = Image.FromStream(response.GetResponseStream());
return img;
}
2网络请求总结,方法1,直接利用StreamReader,读取所有数据,获取字符串
private void SimpleeePost(String url,string param)
{
HttpWebRequest request =(HttpWebRequest) WebRequest.Create(url);
HttpWebResponse response;
byte[] bs = Encoding.ASCII.GetBytes(param);
Stream stream;
using (Stream reqStream = request.GetRequestStream())
{
reqStream.Write(bs,0,bs.Length);
}
using (response = (HttpWebResponse)request.GetResponse())
{
using (stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream);
string responseFromServer = reader.ReadToEnd();
}
}
}
3 将stream网络流直接转化为byte[]
public static byte[] StreamToBytes(Stream reader)
{
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[1024];
int actual = 0;
//从网络流读取数据到字节,如果有数据就读取
while ((actual = ms.Read(buffer, 0, 1024)) > 0)
{
//从字节流写入内存流
ms.Write(buffer, 0, actual);
}
byte[] picbytes = ms.ToArray();
return picbytes;
}
}
文件流的应用:
一. 二进制转换成图片
MemoryStream ms = new MemoryStream(bytes);
Image img = Image.FromStream(ms);
二. C#中byte[]与string的转换代码
1、System.Text.UnicodeEncoding converter = new System.Text.UnicodeEncoding();
byte[] inputBytes =converter.GetBytes(inputString);
string inputString = converter.GetString(inputBytes);
2、string inputString = System.Convert.ToBase64String(inputBytes);
byte[] inputBytes = System.Convert.FromBase64String(inputString);
System.Text.UnicodeEncoding.UTF8.GetBytes()
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
三. C# Stream 和 byte[] 之间的转换
/// 将 Stream 转成 byte[]
public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
/// 将 byte[] 转成 Stream
public Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
}
四. Stream 和 文件之间的转换
将 Stream 写入文件
public void StreamToFile(Stream stream,string fileName)
{
// 把 Stream 转换成 byte[]
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
// 把 byte[] 写入文件
FileStream fs = new FileStream(fileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes);
bw.Close();
fs.Close();
}
五. 从文件读取 Stream
public Stream FileToStream(string fileName)
{
// 打开文件
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
// 读取文件的 byte[]
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
// 把 byte[] 转换成 Stream
Stream stream = new MemoryStream(bytes);
return stream;
}
利用帮助类httpHelper,httpitem设置更多信息模拟网络请求,实质还是利用HttpWebRequest发起请求
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.sufeinet.com",//URL 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
Timeout = 100000,//连接超时时间 可选项默认为100000
ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000
IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
Cookie = "",//字符串Cookie 可选项
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统 可选项有默认值
Accept = "text/html, application/xhtml+xml, */*",// 可选项有默认值
ContentType = "text/html",//返回类型 可选项有默认值
Referer = "http://www.sufeinet.com",//来源URL 可选项
Allowautoredirect = true,//是否根据301跳转 可选项
CerPath = "d:\\123.cer",//证书绝对路径 可选项不需要证书时可以不写这个参数
Connectionlimit = 1024,//最大连接数 可选项 默认为1024
Postdata = "C:\\PERKYSU_20121129150608_ScrubLog.txt",//Post数据 可选项GET时不需要写
PostDataType = PostDataType.FilePath,//默认为传入String类型,也可以设置PostDataType.Byte传入Byte类型数据
ProxyIp = "192.168.1.105:8015",//代理服务器ID 端口可以直接加到后面以:分开就行了 可选项 不需要代理 时可以不设置这三个参数
ProxyPwd = "123456",//代理服务器密码 可选项
ProxyUserName = "administrator",//代理服务器账户名 可选项
ResultType = ResultType.Byte,//返回数据类型,是Byte还是String
PostdataByte = System.Text.Encoding.Default.GetBytes("测试一下"),//如果PostDataType为Byte时要设置本属性的值
CookieCollection = new System.Net.CookieCollection(),//可以直接传一个Cookie集合进来
};
item.Header.Add("测试Key1", "测试Value1");
item.Header.Add("测试Key2", "测试Value2");
//得到HTML代码
HttpResult result = http.GetHtml(item);
//取出返回的Cookie
string cookie = result.Cookie;
//返回的Html内容
string html = result.Html;
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
//表示访问成功,具体的大家就参考HttpStatusCode类
}
//表示StatusCode的文字说明与描述
string statusCodeDescription = result.StatusDescription;
//把得到的Byte转成图片
Image img = byteArrayToImage(result.ResultByte);
}
/// <summary>
/// 字节数组生成图片
/// </summary>
/// <param name="Bytes">字节数组</param>
/// <returns>图片</returns>
private Image byteArrayToImage(byte[] Bytes)
{
MemoryStream ms = new MemoryStream(Bytes);
Image outputImg = Image.FromStream(ms);
return outputImg;
}}
设置安全协议
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
//直接确认,不然打不开
return true;
}
对于流要关闭,close,dispose,using,个人理解
参考文档: