国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# 使用WebRequest發(fā)送post和get請(qǐng)求

這篇具有很好參考價(jià)值的文章主要介紹了C# 使用WebRequest發(fā)送post和get請(qǐng)求。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1.get請(qǐng)求方式

1.1不需要請(qǐng)求參數(shù)時(shí)

1.2請(qǐng)求參數(shù)可以用表單數(shù)據(jù)(鍵值對(duì))拼接時(shí)

2.POST請(qǐng)求方式

2.1請(qǐng)求參數(shù)為json字符串格式時(shí)

2.2請(qǐng)求參數(shù)為表單數(shù)據(jù)(鍵值對(duì))格式時(shí)

2.3請(qǐng)求參數(shù)為多分部數(shù)據(jù)(復(fù)合式表單)格式時(shí),(以上傳文件接口為例)


本文主要介紹了通過(guò)C#中的WebRequest來(lái)發(fā)送post和get兩種請(qǐng)求方式的過(guò)程。

1.get請(qǐng)求方式

1.1不需要請(qǐng)求參數(shù)時(shí)

url為請(qǐng)求的接口地址

private string GetData(string url)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Timeout = 20000;  //超時(shí)時(shí)間
        request.Method = "GET";  //請(qǐng)求方式
        request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
        request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的

        //通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
		
        //獲取響應(yīng)內(nèi)容,返回的數(shù)據(jù)格式: {"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //結(jié)果解析,異常情況判斷
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口錯(cuò)誤";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

1.2請(qǐng)求參數(shù)可以用表單數(shù)據(jù)(鍵值對(duì))拼接時(shí)

url為請(qǐng)求的接口地址,pairs為請(qǐng)求的參數(shù)(字典格式)

private string GetUrlEncodeData(string url, Dictionary<string, string> pairs)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        StringBuilder sb = new StringBuilder();
        foreach (string key in pairs.Keys)
            sb.Append(key).Append("=").Append(pairs[key]).Append("&");
        if (pairs.Count > 0)
            url = url + "?" + sb.ToString().Trim('&');

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContentType = "application/x-www-form-urlencoded"; //表單數(shù)據(jù)(鍵值對(duì))
        request.Timeout = 20000;  //超時(shí)時(shí)間
        request.Method = "GET";  //請(qǐng)求方式
        request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
        request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的

        //通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //獲取響應(yīng)內(nèi)容,返回的數(shù)據(jù)格式: {"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //結(jié)果解析,異常情況判斷
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口錯(cuò)誤";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

2.POST請(qǐng)求方式

2.1請(qǐng)求參數(shù)為json字符串格式時(shí)

url為請(qǐng)求的接口地址,pairs為請(qǐng)求的參數(shù)(字典格式)

private string PostJsonData(string url, Dictionary<string, string> pairs)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Timeout = 20000;  //超時(shí)時(shí)間
        request.Method = "POST";  //請(qǐng)求方式
        request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
        request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的

        //設(shè)置Content-type HTTP標(biāo)頭的值,即請(qǐng)求的媒體類型
        request.ContentType = "application/json"; //json字符串
        //request.ContentType = "multipart/form-data"; //多分部數(shù)據(jù)

        string content = JsonConvert.SerializeObject(pairs);
        byte[] data = Encoding.UTF8.GetBytes(content);
        //寫入請(qǐng)求的參數(shù)
        using (var stream = request.GetRequestStream())
            stream.Write(data, 0, data.Length);

        //通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        //獲取響應(yīng)內(nèi)容,返回的postContent是json字符串格式:{"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //結(jié)果解析,異常情況判斷
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口錯(cuò)誤";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

2.2請(qǐng)求參數(shù)為表單數(shù)據(jù)(鍵值對(duì))格式時(shí)

url為請(qǐng)求的接口地址,pairs為請(qǐng)求的參數(shù)(字典格式)

private string PostUrlEncodeData(string url, Dictionary<string, string> pairs)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContentType = "application/x-www-form-urlencoded"; //表單數(shù)據(jù)(鍵值對(duì))
        request.Timeout = 20000;  //超時(shí)時(shí)間
        request.Method = "POST";  //請(qǐng)求方式
        request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
        request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的

        StringBuilder sb = new StringBuilder();
        foreach (string key in pairs.Keys)
            sb.Append(key).Append("=").Append(pairs[key]).Append("&");
        string content = sb.ToString().Trim('&');
        byte[] data = Encoding.UTF8.GetBytes(content);

        //寫入請(qǐng)求的參數(shù)
        using (var stream = request.GetRequestStream())
            stream.Write(data, 0, data.Length);

        //通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        //獲取響應(yīng)內(nèi)容,返回的json字符串postContent格式: 
        //{"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
        
        //結(jié)果解析,異常情況判斷
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口錯(cuò)誤";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

2.3請(qǐng)求參數(shù)為多分部數(shù)據(jù)(復(fù)合式表單)格式時(shí),(以上傳文件接口為例)

url為請(qǐng)求的接口地址,filePath為文件的絕對(duì)路徑。

首先獲取本地文件路徑,

string uploadURL = "http://127.0.0.1:8888/api/test/";
string uploadFilePath = string.Empty;

OpenFileDialog openFileDialog = new OpenFileDialog
{
    Filter = "所有文件|*.*"
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
    uploadFilePath = openFileDialog.FileName;

string result = PostMultipartData(uploadURL, uploadFilePath);

上傳文件函數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-400462.html

private string PostMultipartData(string url, string filePath)
{
    string result = string.Empty;
    string error = string.Empty;
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        request.Timeout = 20000;  //超時(shí)時(shí)間
        request.Method = "POST";  //請(qǐng)求方式
        request.KeepAlive = true; //解決GetResponse操作超時(shí)問(wèn)題
        request.ContentType = "multipart/form-data"; //多分部數(shù)據(jù)(復(fù)合式表單)
        request.Headers.Add("Authorization", "token"); //如果接口需要鑒權(quán), 把"token"換成自己需要的
        
        //讀取文件內(nèi)容
        FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
        byte[] fileData = new byte[fs.Length];
        fs.Read(fileData, 0, fileData.Length);

        string fileName = Path.GetFileName(filePath);

        //瀏覽器在發(fā)送表單的enctype="multipart/form-data", 需要在往后臺(tái)發(fā)送請(qǐng)求的時(shí)候添加一個(gè)[boundary]屬性
        string boundary = "test" + DateTime.Now.Ticks.ToString("x");  // 邊界符, "test"可以改, 其他部分不能改
        byte[] boundarybytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");  // 邊界符開(kāi)始
        byte[] endbytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");  // 邊界符結(jié)束

        //寫入請(qǐng)求的參數(shù)
        using (var stream = request.GetRequestStream())
        {
            //獲取文件頭的字節(jié)序列
            string temp = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n";
            string header = string.Format(temp, "file", fileName);
            byte[] fileHeader = Encoding.UTF8.GetBytes(header);

            stream.Write(boundarybytes, 0, boundarybytes.Length); //寫入FormData項(xiàng)的開(kāi)始邊界符
            stream.Write(fileHeader, 0, fileHeader.Length); //將文件頭寫入FormData項(xiàng)中

            stream.Write(boundarybytes, 0, boundarybytes.Length); //每?jī)纱螌懭胫g要加入開(kāi)始邊界符
            stream.Write(fileData, 0, fileData.Length);  //將文件流寫入FormData項(xiàng)
            stream.Write(endbytes, 0, endbytes.Length);  //寫入FormData的結(jié)束邊界符
        }

        //通過(guò)HttpWebRequest的GetResponse()方法建立HttpWebResponse,強(qiáng)制類型轉(zhuǎn)換
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        //獲取響應(yīng)內(nèi)容,返回的json字符串postContent格式: 
        //{"status":"success","msg":"成功","data":{"info": "example"}}
        string postContent = new StreamReader(response.GetResponseStream()).ReadToEnd();

        //結(jié)果解析,異常情況判斷
        JObject json = JObject.Parse(postContent);
        var gList = json["data"];
        if (json["status"] == null || gList == null || json["msg"] == null)
            error = "接口錯(cuò)誤";
        else if (json["status"].ToString() != "success")
            error = string.Format("接口查詢結(jié)果返回錯(cuò)誤,{0}", json["msg"]);
        else if (gList.ToString() != string.Empty)
            result = gList["info"].ToString();
        else { }
    }
    catch (Exception ex)
    {
        error = ex.Message;
    }
    if (error != string.Empty)
        MessageBox.Show(error);

    return result;
}

到了這里,關(guān)于C# 使用WebRequest發(fā)送post和get請(qǐng)求的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語(yǔ)言通過(guò)IXMLHTTPRequest以get或post方式發(fā)送http請(qǐng)求獲取服務(wù)器文本或xml數(shù)據(jù)

    C語(yǔ)言通過(guò)IXMLHTTPRequest以get或post方式發(fā)送http請(qǐng)求獲取服務(wù)器文本或xml數(shù)據(jù)

    做過(guò)網(wǎng)頁(yè)設(shè)計(jì)的人應(yīng)該都知道ajax。 Ajax即Asynchronous Javascript And XML(異步的JavaScript和XML)。使用Ajax的最大優(yōu)點(diǎn),就是能在不更新整個(gè)頁(yè)面的前提下維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地回應(yīng)用戶動(dòng)作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒(méi)有改變的信息。 在IE瀏覽器中,Ajax技術(shù)就是

    2024年01月25日
    瀏覽(26)
  • 使用postman發(fā)送post請(qǐng)求,卻報(bào)錯(cuò)不支持get請(qǐng)求的原因

    使用postman發(fā)送post請(qǐng)求,卻報(bào)錯(cuò)不支持get請(qǐng)求的原因

    場(chǎng)景復(fù)現(xiàn) 可以看到我們postman發(fā)出的確實(shí)是post請(qǐng)求,message卻報(bào)錯(cuò)這個(gè)接口不支持get請(qǐng)求,說(shuō)明服務(wù)器實(shí)際上收到的是一個(gè)get請(qǐng)求。 產(chǎn)生原因分析 如果我們?cè)L問(wèn)的是線上的接口,線上的nginx一般都會(huì)對(duì)http訪問(wèn)做一個(gè)302重定向,跳轉(zhuǎn)為https訪問(wèn)。 如果我們正常訪問(wèn)一個(gè)頁(yè)面,它

    2024年02月09日
    瀏覽(37)
  • Java 中使用 OkHttpClent 請(qǐng)求接口 get方式 post方式

    學(xué)習(xí)記錄,不喜勿噴 一般在Java平臺(tái)上,我們會(huì)使用Apache HttpClient作為Http客戶端,用于發(fā)送 HTTP 請(qǐng)求,并對(duì)響應(yīng)進(jìn)行處理。比如可以使用http客戶端與第三方服務(wù)(如SSO服務(wù))進(jìn)行集成,當(dāng)然還可以爬取網(wǎng)上的數(shù)據(jù)等。OKHttp與HttpClient類似,也是一個(gè)Http客戶端,提供了對(duì) HTTP/2 和

    2024年02月12日
    瀏覽(26)
  • httpclient發(fā)送Get請(qǐng)求和Post請(qǐng)求

    httpclient發(fā)送Get請(qǐng)求和Post請(qǐng)求

    1). 創(chuàng)建HttpClient對(duì)象,可以使用 HttpClients.createDefault() ; 2). 如果是無(wú)參數(shù)的GET請(qǐng)求,則直接使用構(gòu)造方法 HttpGet(String url )創(chuàng)建HttpGet對(duì)象即可; 3)如果是帶參數(shù)GET請(qǐng)求,則可以先使用 URIBuilder (String url)創(chuàng)建對(duì)象,再調(diào)用 addParameter (Stringparam, String value)`, 或setParameter(String param

    2024年02月06日
    瀏覽(18)
  • chrome 模擬發(fā)送POST請(qǐng)求和GET請(qǐng)求

    F12打開(kāi)Console輸入以下代碼:

    2024年02月11日
    瀏覽(21)
  • 使用OkHttp發(fā)送POST請(qǐng)求的幾種方式

    本文將介紹 OkHttp 客戶端的基本用法。 主要介紹 OkHttp 3.x 版本中發(fā)送Post請(qǐng)求的幾種方式。 使用 FormBody.Builder 構(gòu)造基本的 RequestBody , 包含兩個(gè)參數(shù):用戶名、密碼,發(fā)送 POST請(qǐng)求。 如果要對(duì)請(qǐng)求進(jìn)行身份驗(yàn)證,可以使用 Credentials.basic 構(gòu)建器向請(qǐng)求頭中添加憑據(jù)。 下面代碼給

    2024年02月13日
    瀏覽(23)
  • HttpRequest發(fā)送網(wǎng)絡(luò)請(qǐng)求POST/GET

    會(huì)返回你需要的數(shù)據(jù),類型為String HttpRequest.get獲取網(wǎng)絡(luò)發(fā)過(guò)來(lái)的String類型的數(shù)據(jù),如需獲取里面的某一參數(shù),需對(duì)數(shù)據(jù)進(jìn)行解析。解析方式如下: 示例接收到的String類型轉(zhuǎn)JSON后格式: ?解析:

    2024年01月19日
    瀏覽(23)
  • 原生js創(chuàng)建get/post請(qǐng)求以及封裝方式、axios的基本使用

    原生js創(chuàng)建get請(qǐng)求 原生js創(chuàng)建post請(qǐng)求 原生get和post封裝方式1 原生get和post封裝方式2 axios的基本使用

    2024年02月21日
    瀏覽(26)
  • Java發(fā)送HTTP GET/POST請(qǐng)求

    在這篇文章中,將向你展示四種發(fā)送Http的GET/POST的例子,如下: 在Java11的java.net.http.*包中,有一個(gè)HttpClient類可以完成HTTP請(qǐng)求。 Java11HttpClientExample.java 本例使用HttpURLConnection(http)和HttpsURLConnection(https) HttpURLConnectionExample.java 使用Apache HttpClient完成HTTP請(qǐng)求的發(fā)送需要添加Maven依賴

    2024年02月13日
    瀏覽(23)
  • curl命令行發(fā)送post/get請(qǐng)求

    curl 是一個(gè)命令行實(shí)用程序,允許用戶 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求 curl 在 Windows 、 Linux 和 Mac 上皆可使用 一個(gè)簡(jiǎn)單的 POST 請(qǐng)求 -X :指定與遠(yuǎn)程服務(wù)器通信時(shí)將使用哪種 HTTP 請(qǐng)求方法 POST 請(qǐng)求傳遞數(shù)據(jù) -d :設(shè)置請(qǐng)求參數(shù)(拼接參數(shù)或json) -H :設(shè)置request里的header -F :模擬HTTP表單數(shù)據(jù)提交

    2024年02月05日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包