1. 程式人生 > >C# 網路程式設計練習

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