1. 程式人生 > >C# 發起普通http請求

C# 發起普通http請求

public class NetHelper
    {
        private static NetHelper _instance = new NetHelper();


        public static NetHelper Instance
        {
            get
            {
                return _instance;
            }
        }


        /// <summary>
        /// POST請求
        /// </summary>
        /// <param name="url">要請求的地址</param>
        /// <param name="parameters">要傳遞的引數</param>
        /// <param name="timeout">預設超時時間設定</param>
        /// <returns></returns>
        public string DoPost(string url, IDictionary<string, string> parameters, int timeout = 20000)
        {
            try
            {
                HttpWebRequest request = this.GetWebRequest(url, "POST", timeout);
              
                byte[] buffer = Encoding.UTF8.GetBytes(this.BuildQuery(parameters));
                request.ContentLength = buffer.Length;


                Stream stream = request.GetRequestStream();
                stream.Write(buffer, 0, buffer.Length);
                stream.Close();


                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Encoding encoding = this.GetEncoding(response.CharacterSet);
                return GetResponseAsString(response, encoding);
            }
            catch (Exception ex)
            {


            }


            return string.Empty;
        }


        /// <summary>
        /// GET請求
        /// </summary>
        /// <param name="url">要請求的地址</param>
        /// <param name="parameters">要傳遞的引數</param>
        /// <param name="timeout">預設超時時間</param>
        /// <returns></returns>
        public string DoGet(string url, IDictionary<string, string> parameters, int timeout = 20000)
        {
            try
            {
                if (parameters != null && parameters.Count > 0)
                {
                    if (url.Contains("?"))
                    {
                        url = url + "&" + BuildQuery(parameters);
                    }
                    else
                    {
                        url = url + "?" + BuildQuery(parameters);
                    }
                }


                HttpWebRequest request = GetWebRequest(url, "GET", timeout);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //Encoding encoding = this.GetEncoding(response.CharacterSet);
                Encoding encoding = Encoding.UTF8;
                return GetResponseAsString(response, encoding);
            }
            catch (Exception ex)
            {


            }


            return string.Empty;
        }


        /// post 請求
        /// </summary>
        /// <param name="url">請求地址</param>
        /// <param name="data">地址後面的引數</param>
        /// <param name="content">post資料內容</param>
        /// <returns></returns>
        public string RequestPost(string url, string content, bool isJson = false)
        {
            string result = "";
            byte[] bytes = Encoding.UTF8.GetBytes(content);
            HttpWebRequest request = GetHttpWebRequest(url, bytes.Length, isJson);
            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(bytes, 0, bytes.Length);
            }
            using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8))
            {
                result = reader.ReadToEnd().ToString();
            }
            return result;
        }      

        private HttpWebRequest GetWebRequest(string url, string method, int timeout = 20000)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Timeout = timeout;
            request.ServicePoint.Expect100Continue = false;
            request.KeepAlive = true;
            request.Method = method;
            request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
            request.Headers.Add("content", "text/html; charset=utf-8");
            //request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)";

            return request;
        }


        /// <summary>
        /// 組裝普通文字請求引數。
        /// </summary>
        /// <param name="parameters">Key-Value形式請求引數字典</param>
        /// <returns>URL編碼後的請求資料</returns>
        private string BuildQuery(IDictionary<string, string> parameters)
        {
            if (null == parameters)
                return "";


            StringBuilder data = new StringBuilder();
            bool flag = false;


            IEnumerator<KeyValuePair<string, string>> temp = parameters.GetEnumerator();
            while (temp.MoveNext())
            {
                string name = temp.Current.Key;
                string value = temp.Current.Value;
                // 忽略引數名或引數值為空的引數
                if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
                {
                    if (flag)
                    {
                        data.Append("&");
                    }


                    data.Append(name);
                    data.Append("=");
                    data.Append(System.Web.HttpUtility.UrlEncode(value, Encoding.UTF8));
                    flag = true;
                }
            }

            return data.ToString();
        }


        private Encoding GetEncoding(string character)
        {
            if (string.IsNullOrEmpty(character))
                return Encoding.UTF8;
            return Encoding.GetEncoding(character);
        }


        /// <summary>
        /// 把響應流轉換為文字。
        /// </summary>
        /// <param name="rsp">響應流物件</param>
        /// <param name="encoding">編碼方式</param>
        /// <returns>響應文字</returns>
        public string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
        {
            Stream stream = null;
            StreamReader reader = null;
            string result = string.Empty;


            try
            {
                // 以字元流的方式讀取HTTP響應
                stream = rsp.GetResponseStream();
                reader = new StreamReader(stream, encoding);
                result = reader.ReadToEnd();
            }
            finally
            {
                // 釋放資源
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
            }
            return result;

        }

    }


相關推薦

C# 發起普通http請求

public class NetHelper     {         private static NetHelper _instance = new NetHelper();         public static NetHelper Instance      

使用CURL檢測Clinet側發起HTTP請求各階段時間

使用curl檢測clinet側發起的http請求各階段時間前言上周,我方的一個客戶反饋,訪問我們的接口,平均耗時在2s以上。但是我方對請求進入,和請求返回,整個過程都有監控,我方的耗時基本在50ms以內,非常快。後來了解到,客戶從廣東訪問到我方上海,公網來訪問我方。那麽就建議去檢測,DNS耗時,TCP建立的耗

C# 後臺處理http請求

處理 IT 方式 span 亂碼 bottom AD bytearray ret using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using Syst

如何使用事務碼SMICM分析ABAP程式碼發起HTTP請求的錯誤ICM_HTTP_SSL_PEER_CERT_UNTRUSTED

當我用CL_HTTP_CLIENT往一個外網的url發請求時,遇到錯誤:ICM_HTTP_SSL_PEER_CERT_UNTRUSTED 錯誤是從這段ABAP程式碼裡丟擲來的: CALL METHOD lo_http_client->get_last_error IMPORTING code

AJAX請求普通HTTP請求區別(postman分析)

兩者本質區別: AJAX通XMLHttpRequest物件請求伺服器伺服器接受請求返資料實現重新整理互動 普通http請求通httpRequest象請求伺服器接受請求返資料需要頁面重新整理 AJAX請求頭會多一個x-requested-with引數,值為XMLHttpRequest &n

如何使用事務碼SMICM分析ABAP程式碼發起HTTP請求的錯誤

當我用CL_HTTP_CLIENT往一個外網的url發請求時,遇到錯誤:ICM_HTTP_SSL_PEER_CERT_UNTRUSTED 錯誤是從這段ABAP程式碼裡丟擲來的: CALL METHOD lo_http_client->get_last_er

C socket 傳送HTTP請求

HTTP請求頭部樣例: GET http://www.baidu.com/ HTTP/1.1 Accept: html/text Host: 220.181.6.175:80 Connection: Close 這是一個請求百度頁面的頭部。 屬性和值的命名中間用:和空格隔

C++實現的HTTP請求封裝(POST/GET)

純C++實現的HTTP請求(POST/GET),支援windows和linux, 進行簡單的封裝, 方便呼叫。實現如下: #include "HttpConnect.h" #ifdef WIN32 #pragma comment(lib,"ws2_32.l

C#後臺傳送HTTP請求

HttpResponse 1.涵蓋POST,GET方法 using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; usi

C# http請求請求頭部分

reat ont source sys data ucc his content xmlhttp 使用js+Ajax請求API接口數據-帶請求頭方式直接上代碼前臺調用:<script type="text/javascript"> functio

C# HTTP請求GET,POST

地址 ont odi lec stat 重定向 htm 封裝 true 轉自原文 【C#】HTTP請求GET,POST HTTP定義了與服務器交互的不同方法,基本方法有GET,POST,PUT,DELETE,分別對於查,該,增,刪。一般情況下我們只用到GET和POS

C/C++使用libcurl庫發送http請求(get和post可以用於請求html信息,也可以請求xml和json等串)

網絡連接 get 編譯 eas views vs2015 return tar linux C++要實現http網絡連接,需要借助第三方庫,libcurl使用起來還是很方便的 環境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下載

網絡通信第一課 C++封裝HTTP請求報文說明

c++ http post一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成使用C++組裝上述報文 boost::asio::streambuf request; std::ostream request_stream(&request);

C# 發送Http協議 模擬 Post Get請求

head log cnblogs cep bsp empty read ram color 1.參數 paramsValue的格式 要和 Reques.ContentType一致, 如果 contentype "application/x-www-form-urlenco

C#模擬HTTP請求並發送二進制

keep lose type response ica con new urn for public static String Submit(String methodName) { string postData = "this is post data";/

使用libcurl的包裝庫cpr發起http請求

cout main title pow dsa ext lan text post cpr GitHub地址https://github.com/whoshuu/cpr 簡單示例:cpr_http_request.cpp #include <iostream>

用Java發起HTTP請求與獲取狀態碼(含狀態碼列表)

滿足 null timeout etc default 語法 訪問 網頁 trace 轉自:https://blog.csdn.net/xyw591238/article/details/51072697 在使用Java請求Web程序比如訪問WebService接口時,通

C# 如何發送Http請求

quest string uget class nuget bin ken pos ict HttpSender是一個用來發送Http消息的輕量庫,使用非常簡單 使用 Nuget,搜索 HttpSender 就能找到 命名空間是HttpSender,類名是Sender 方法

控制檯實現js發起http請求 —— AJAX 例項解析

此處以一個簡單的測試使用者登入介面為例。。。 如果一個網站的登入模組設計的很簡單的話,可以通過不斷髮起請求去測試一個賬號的密碼。。。 // 第一步:建立 XMLHttpRequest 物件 var xmlhttp; if (window.XMLHttpRequest) {// code

Jmeter,使用【外部檔案資料】作為【請求資料】發起HTTP請求

目錄 前言 操作 (一)新增執行緒組 (二)新增HTTP請求 (三)新增HTTP資訊頭管理器 (四)準備資料檔案 (五)新增CSV資料檔案設定 (五)設定HTTP請求的入參為外部資料變數(按列) (六)新增察看結果樹 (七)新增聚合報告 (八)修改執行緒組