C# 网络编程练习

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,个人理解

参考文档:

https://www.cnblogs.com/sunxuchu/p/5635473.html

猜你喜欢

转载自blog.csdn.net/qq_25744257/article/details/84651440