天天看點

C# winform post 請求指定 url

using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Net;
 using System.Text;namespace Tt.KD100.Initiative.WinService
 {
   /// <summary>
   /// 請求資訊幫助
   /// </summary>
   public class HttpHelper
   {
     /// <summary>
     /// post 請求指定位址傳回響應資料
     /// </summary>
     /// <param name="url">請求位址</param>
     /// <param name="postData">請求資料</param>
     /// <param name="timeout">請求逾時時間(毫秒)</param>
     /// <param name="requestCoding">請求編碼</param>
     /// <param name="responseCoding">響應編碼</param>
     /// <returns></returns>
     public string PostRequest(string url, Dictionary<string, string> postData, int timeout,Encoding requestCoding, Encoding responseCoding)
     {
       string postStr = string.Empty;
       if (postData!=null)
       {
         postData.All(o =>
                        {
                          if (string.IsNullOrEmpty(postStr))
                            postStr = string.Format("{0}={1}", o.Key, o.Value);
                          else
                            postStr += string.Format("&{0}={1}", o.Key, o.Value);                         return true;
                        });
       }
       return PostRequest(url, postStr,timeout, requestCoding, responseCoding);
     }
     /// <summary>
     /// post 請求指定位址傳回響應資料
     /// </summary>
     /// <param name="url">請求位址</param>
     /// <param name="postData">請求資料</param>
     /// <param name="timeout">請求逾時時間(毫秒)</param>
     /// <param name="requestCoding">請求編碼</param>
     /// <param name="responseCoding">響應編碼</param>
     /// <returns></returns>
     public string PostRequest(string url, string postData,int timeout, Encoding requestCoding,Encoding responseCoding)
     {
       string postUrl = VerifyUrl(url);
       try
       {
         //寫入POSTDATE裡
         byte[] byteArray = requestCoding.GetBytes(postData);
         HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
         webRequest.Method = "POST";
         webRequest.Timeout = timeout; 
         webRequest.ContentType = "application/x-www-form-urlencoded";
         webRequest.ContentLength = byteArray.Length;
         Stream newStream = webRequest.GetRequestStream();
         newStream.Write(byteArray, 0, byteArray.Length);
         newStream.Close();
         //接收傳回資訊:
         HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
         StreamReader php = new StreamReader(response.GetResponseStream(), responseCoding);
         string result = php.ReadToEnd();
         return result;
       }
       catch (Exception ex)
       {
         Grass.Log.ExceptionsStack.RegisterError(ex);
         return string.Empty;
       }
     }
     /// <summary>
     /// 驗證URL
     /// </summary>
     /// <param name="url">待驗證 URL</param>
     /// <returns></returns>
    private string VerifyUrl(string url)
     {
       if(string.IsNullOrEmpty(url))
         throw new Exception("URL 位址不可以為空!");      if (url.StartsWith("http://", StringComparison.CurrentCultureIgnoreCase))
         return url;      return string.Format("​​http://{1​​}", url);
     }
   }
 }