實現http的post和get的幾種方法


1.POST方法(httpWebRequest)POST方法(httpWebRequest)

#region  POST方法(httpWebRequest)

//body是要傳遞的參數,格式"roleId=1&uid=2"
//post的cotentType填寫:
//"application/x-www-form-urlencoded"
//soap填寫:"text/xml; charset=utf-8"
    public static string PostHttp(string url, string body, string contentType)
    {
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

        httpWebRequest.ContentType = contentType;
        httpWebRequest.Method = "POST";
        httpWebRequest.Timeout = 20000;

        byte[] btBodys = Encoding.UTF8.GetBytes(body);
        httpWebRequest.ContentLength = btBodys.Length;
        httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);

        HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
        string responseContent = streamReader.ReadToEnd();

        httpWebResponse.Close();
        streamReader.Close();
        httpWebRequest.Abort();
        httpWebResponse.Close();

        return responseContent;
    }
#endregion

</pre></p><p><span style="font-size:18px;color:#ff0000;">2.POST方法(WebClient)</span></p><p><pre class="csharp" name="code">/// <summary>
        /// 通過WebClient類Post數據到遠程地址,需要Basic認證;
        /// 調用端自己處理異常
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="paramStr">name=張三&age=20</param>
        /// <param name="encoding">請先確認目標網頁的編碼方式</param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password)
        {
            if (encoding == null)
                encoding = Encoding.UTF8;
            string result = string.Empty;
            WebClient wc = new WebClient();
            // 採取POST方式必須加的Header
            wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            byte[] postData = encoding.GetBytes(paramStr);
            if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
            {
                wc.Credentials = GetCredentialCache(uri, username, password);
                wc.Headers.Add("Authorization", GetAuthorization(username, password));
            }
            byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流
            return encoding.GetString(responseData);// 解碼                  
        }<span style="font-size:18px;color:#ff0000;">
</span>

3.Get方法(HttpWebRequest)

public static string GetHttp(string url, HttpContext httpContext)
        {
        string queryString = "?";
        foreach (string key in httpContext.Request.QueryString.AllKeys)
        {
            queryString += key + "=" + httpContext.Request.QueryString[key] + "&";
        }
        queryString = queryString.Substring(0, queryString.Length - 1);
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "GET";
        httpWebRequest.Timeout = 20000;
        //byte[] btBodys = Encoding.UTF8.GetBytes(body);
        //httpWebRequest.ContentLength = btBodys.Length;
        //httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
        HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
        string responseContent = streamReader.ReadToEnd();
        httpWebResponse.Close();
        streamReader.Close();
        return responseContent;
    }

4.basic驗證的WebRequest/WebResponse

/// <summary>
        /// 通過 WebRequest/WebResponse 類訪問遠程地址並返回結果,需要Basic認證;
        /// 調用端自己處理異常
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="timeout">訪問超時時間,單位毫秒;如果不設置超時時間,傳入0</param>
        /// <param name="encoding">如果不知道具體的編碼,傳入null</param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)
        {
            string result = string.Empty;
            WebRequest request = WebRequest.Create(new Uri(uri));
            if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
            {
                request.Credentials = GetCredentialCache(uri, username, password);
                request.Headers.Add("Authorization", GetAuthorization(username, password));
            }
            if (timeout > 0)              
            { request.Timeout = timeout;}
            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);
            result = sr.ReadToEnd();
            sr.Close();
            stream.Close();
            return result;
        }
        #region # 生成 Http Basic 訪問憑證 #
        private static CredentialCache GetCredentialCache(string uri, string username, string password)
        {
            string authorization = string.Format("{0}:{1}", username, password);
            CredentialCache credCache = new CredentialCache();
            credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));
            return credCache;
        }
        private static string GetAuthorization(string username, string password)
        {
            string authorization = string.Format("{0}:{1}", username, password);
            return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));
        }
        #endregion







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章