Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产精品一区在线麻豆,91免费国产视频,国产精品一区二区三区免费视频

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          不會(huì)接口測(cè)試?Postman輕松入門(四)-Post請(qǐng)求url格式請(qǐng)求體

          HTTP協(xié)議報(bào)文有了充分了解之后,上一節(jié)我們對(duì)get請(qǐng)求進(jìn)行了詳盡的測(cè)試,由于get請(qǐng)求沒有請(qǐng)求體,相對(duì)來(lái)說比較簡(jiǎn)單,接下來(lái)我們加上請(qǐng)求體,看看使用post接口如何完成各種不同類型請(qǐng)求體的請(qǐng)求操作。

          需要注意的是,post請(qǐng)求也并不一定都有請(qǐng)求體,遇到?jīng)]有請(qǐng)求體的post接口,處理方式和get請(qǐng)求完全一致。

          請(qǐng)求需要用到的四要素中:HTTP方法和url地址是顯而易見的;沒有特殊說明時(shí),基本的請(qǐng)求頭不需要關(guān)注,Postman會(huì)自動(dòng)添加;重點(diǎn)關(guān)注請(qǐng)求體以及與它配套的Content-Type頭域。

          常用的接口測(cè)試請(qǐng)求體的編輯格式包括如下幾種,和Content-Type頭域分別對(duì)應(yīng):

            • application/x-www-form-urlencoded:url編碼格式 即 鍵=值&鍵=值格式
            • application/json: json格式 即 {"鍵":值,"鍵":值} 格式
            • text/xml:xml格式 即 <鍵>值<鍵>格式
            • multipart/form-data: 文本與文件混合格式表單,通常用于文件上傳

          這里的Content-Type頭域和請(qǐng)求體的關(guān)系,相當(dāng)于快遞運(yùn)輸時(shí)的運(yùn)輸方式,比如請(qǐng)求體是水,就用常溫運(yùn)輸,如果是冰,就需要冷藏的方式運(yùn)輸了。

          接下來(lái)幾節(jié),我們分別來(lái)看各種請(qǐng)求體格式應(yīng)該如何使用Postman完成請(qǐng)求。

          urlencoded格式請(qǐng)求體實(shí)現(xiàn)請(qǐng)求

          請(qǐng)求示例:

          本例使用的接口為電商項(xiàng)目登錄接口,接口信息如下

            • 項(xiàng)目地址:http://www.testingedu.com.cn:8000/
            • 接口url地址:http://www.testingedu.com.cn:8000/index.php?m=Home&c=User&a=do_login&t=0.46532356966410116

          通過抓包獲取接口的基本信息,可以看到請(qǐng)求頭中Content-Type字段值為application/x-www-form-urlencoded,它的格式我們非常熟悉,和url中?后面的參數(shù)格式相同,為鍵=值&鍵=值得格式。

          可以在fiddler或者其它抓包工具中查看請(qǐng)求參數(shù)的美化組織格式,上述請(qǐng)求體對(duì)應(yīng)于webform格式下的請(qǐng)求體內(nèi)容以表格形式顯示如下:

          Postman完成請(qǐng)求:

          針對(duì)application/x-www-form-urlencoded格式,可以用兩種方式在postman的Body菜單中填寫:

          1、用x-www-form-urlencoded菜單分欄填寫


          注意不要把請(qǐng)求url地址的參數(shù)也填寫進(jìn)來(lái)了,那些參數(shù)在Params菜單中。

          編輯完請(qǐng)求體之后可以查看Headers中的頭域信息,會(huì)發(fā)現(xiàn)除了基本頭域以外,加入了Content-Type和Content-Length兩個(gè)頭域,分別表示請(qǐng)求體的類型和長(zhǎng)度。

          由此可見,當(dāng)選擇x-www-form-urlencoded時(shí),postman會(huì)自動(dòng)在頭域中添加請(qǐng)求體相關(guān)的頭域參數(shù)設(shè)置。

          這里返回體格式直接以純文本形式當(dāng)做HTML顯示,其中的中文內(nèi)容還是未經(jīng)處理的unicode編碼,可以通過切換返回體的格式下拉欄菜單為JSON,以美化后的格式顯示,并對(duì)中文等特殊符號(hào)進(jìn)行轉(zhuǎn)碼。

          2、用raw格式直接填寫原始url編碼格式

          在Body菜單中選擇raw格式,然后將原始url編碼字符串直接粘貼進(jìn)輸入欄中,發(fā)起請(qǐng)求會(huì)發(fā)現(xiàn)返回結(jié)果是請(qǐng)?zhí)顚戀~號(hào)或密碼,說明我們的請(qǐng)求體內(nèi)容中攜帶的用戶名密碼等信息并沒有被服務(wù)器接受。

          切換到Headers中查看,會(huì)發(fā)現(xiàn)其中的Content-Type并不是applicaiton/x-www-form-urlencoded,而是text/plain純文本格式的請(qǐng)求,因而才會(huì)導(dǎo)致請(qǐng)求體格式不被服務(wù)器接受。

          相當(dāng)于服務(wù)器原本是希望收到冷凍起來(lái)的冰,而我們卻選擇了常溫運(yùn)輸方式,服務(wù)器也就認(rèn)為自己沒有收到需要的用戶名密碼。

          因此我們要做的處理是在Headers中修改Content-Type的值,由于原本自動(dòng)添加的Content-Type不能修改,因此取消勾選并新增一個(gè)Content-Type,值為application/x-www-form-urlencoded

          重新發(fā)送之后,就可以得到正確的請(qǐng)求結(jié)果了。

          希望本文對(duì)你有所幫助~~如果對(duì)軟件測(cè)試、接口測(cè)試、自動(dòng)化測(cè)試、面試經(jīng)驗(yàn)交流感興趣可以私聊我或關(guān)注公眾號(hào)“特斯汀軟件測(cè)試”。免費(fèi)領(lǐng)取最新軟件測(cè)試大廠面試資料和Python自動(dòng)化、接口、框架搭建學(xué)習(xí)資料!技術(shù)大牛解惑答疑,同行一起交流。

          NET (C#) 中,發(fā)送 HTTP GET 和 POST 請(qǐng)求可以通過多種方式實(shí)現(xiàn),主要依賴于 .NET Framework 或 .NET Core/5+ 的版本。.NET中提供了多種方法來(lái)發(fā)送HTTP請(qǐng)求,每種方法都有其優(yōu)缺點(diǎn)。選擇哪種方法取決于具體需求和環(huán)境。

          1、HttpClient 類 (推薦)

          HttpClient 是 .NET 中處理 HTTP 請(qǐng)求的現(xiàn)代方法。它是線程安全的,支持異步操作,并且可以用于多個(gè)請(qǐng)求。

          適用平臺(tái):.NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+

          其它平臺(tái)的移植版本可以通過Nuget來(lái)安裝。(Nuget使用方法:VS(Visual Studio)中Nuget的使用-CJavaPy)

          命名空間:using System.Net.Http;

          HttpClient推薦使用單一實(shí)例共享使用,發(fā)關(guān)請(qǐng)求的方法推薦使用異步的方式,代碼如下,

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          using System.Threading.Tasks;
          using System.Net.Http;
           
          namespace ConsoleApplication
          {
              class Program
              {
                  private static readonly HttpClient client = new HttpClient();
                  static void Main(string[] args)
                  {
                      //發(fā)送Get請(qǐng)求
                      var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
                      //發(fā)送Post請(qǐng)求
                      var values = new Dictionary
                      {
                         { "thing1", "hello" },
                         { "thing2", "world" }
                      };
                      var content = new FormUrlEncodedContent(values);
                      var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
                      var responseString = await response.Content.ReadAsStringAsync();
                  }
              }
          }
          

          2、使用第三方類庫(kù)

          除了上述方法,還有許多第三方庫(kù)可以用于發(fā)送HTTP請(qǐng)求,例如 RestSharp 和 Flurl。這些庫(kù)通常提供更高級(jí)的功能,例如支持多種身份驗(yàn)證方法和自動(dòng)重試機(jī)制。

          1)Flurl.Http(可以通過Nuget來(lái)安裝)

          Flurl.Http 是一個(gè)在 .NET 環(huán)境下使用的流行的 HTTP 客戶端庫(kù)。它提供了一個(gè)簡(jiǎn)潔的 API 來(lái)創(chuàng)建 HTTP 請(qǐng)求,并支持異步操作。Flurl.Http 使得發(fā)送 HTTP 請(qǐng)求、接收響應(yīng)、處理異常和解析數(shù)據(jù)變得非常簡(jiǎn)單。

          命名空間:using Flurl.Http;

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          using System.Threading.Tasks;
          using Flurl.Http;
           
          namespace ConsoleApplication
          {
              class Program
              {
                 public static async Task Main(string[] args)
                  {
                     // 示例URL
                  string getUrl = "https://example.com";
                  string postUrl = "https://example.com/post";
          
                  // 發(fā)送GET請(qǐng)求
                  string htmlContent = await GetHtmlAsync(getUrl);
                  Console.WriteLine("GET請(qǐng)求結(jié)果:");
                  Console.WriteLine(htmlContent);
          
                  // 發(fā)送POST請(qǐng)求
                  var postData = new { Name = "John", Age = 30 };
                  var postResponse = await PostJsonAsync<object>(postUrl, postData);
                  Console.WriteLine("POST請(qǐng)求結(jié)果:");
                  Console.WriteLine(postResponse);
          
                  // 發(fā)送帶有查詢參數(shù)和頭信息的GET請(qǐng)求
                  string htmlContentWithHeaders = await GetHtmlWithHeadersAsync(getUrl);
                  Console.WriteLine("帶查詢參數(shù)和頭信息的GET請(qǐng)求結(jié)果:");
                  Console.WriteLine(htmlContentWithHeaders);
          
                  // 安全地發(fā)送GET請(qǐng)求
                  string safeHtmlContent = await SafeRequestAsync(getUrl);
                  Console.WriteLine("安全GET請(qǐng)求結(jié)果:");
                  Console.WriteLine(safeHtmlContent);
                  }
                  public static async Task<string> GetHtmlAsync(string url)
                  {
                      return await url.GetStringAsync();
                  }
              
                  public static async Task<TResponse> PostJsonAsync<TResponse     >(string url, object data)
                  {
                      return await url
                          .PostJsonAsync(data)
                          .ReceiveJson<TResponse>();
                  }
              
                  public static async Task<string> GetHtmlWithHeadersAsync(string      url)
                  {
                      return await url
                          .SetQueryParams(new { param1 = "value1", param2 = "value2"      })
                          .WithHeader("Accept", "application/json")
                          .GetStringAsync();
                  }
              
                  public static async Task<string> SafeRequestAsync(string url)
                  {
                      try
                      {
                          return await url.GetStringAsync();
                      }
                      catch (FlurlHttpException ex)
                      {
                          return "HTTP Error: " + ex.Message;
                      }
                      catch (Exception ex)
                      {
                          return "General Error: " + ex.Message;
                      }
                  }
              }
          }
          

          2)RestSharp(可以通過Nuget來(lái)安裝)

          RestSharp 是一個(gè)用于在 .NET 中發(fā)送 HTTP 請(qǐng)求的簡(jiǎn)單 REST 和 HTTP API 客戶端。它可以用于構(gòu)建和發(fā)送各種 HTTP 請(qǐng)求,并處理響應(yīng)。

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          using System.Threading.Tasks;
          using RestSharp;
           
          namespace ConsoleApplication
          {
              class Program
              {
                  static void Main(string[] args)
                  {
                       //發(fā)送Get和Post請(qǐng)求
                      RestClient client = new RestClient("http://example.com");//指定請(qǐng)求的url
                      RestRequest req = new RestRequest("resource/{id}", Method.GET);//指定請(qǐng)求的方式,如果Post則改成Method.POST
                      request.AddParameter("name", "value"); // 添加參數(shù)到 URL querystring
                      request.AddUrlSegment("id", "123"); //替換上面指定請(qǐng)求方式中的{id}參數(shù)
                      //req.AddBody(body); /*如發(fā)送post請(qǐng)求,則用req.AddBody ()指定body內(nèi)容*/
                      //發(fā)送請(qǐng)求得到請(qǐng)求的內(nèi)容
                      //如果有header可以使用下面方法添加
                      //request.AddHeader("header", "value");
                      IRestResponse response = client.Execute(request);
                      //上傳一個(gè)文件
                      //request.AddFile("file", path);
                      var content = response.Content; // 未處理的content是string
                      //還可以下面幾種方式發(fā)送請(qǐng)求
                      //發(fā)送請(qǐng)求,反序列化請(qǐng)求結(jié)果
                      IRestResponse response2 = client.Execute(request);
                      var name = response2.Data.Name;
                      //發(fā)送請(qǐng)求下載一個(gè)文件,并保存到path路徑
                      client.DownloadData(request).SaveAs(path);
                      // 簡(jiǎn)單發(fā)送異步請(qǐng)求
                      await client.ExecuteAsync(request);
                      // 發(fā)送異常請(qǐng)求并且反序列化結(jié)果
                      var asyncHandle = client.ExecuteAsync(request, response => {
                          Console.WriteLine(response.Data.Name);
                      });
                      //終止異步的請(qǐng)求
                      asyncHandle.Abort();
                  }
                 
              }
          }
          

          3、WebRequest 和 WebResponse

          較舊的方法,現(xiàn)在通常推薦使用 HttpClient。但在一些舊項(xiàng)目或特定場(chǎng)景下,WebRequest 和 WebResponse 仍然有用。

          適用平臺(tái):.NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0+

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          using System.Threading.Tasks;
          using System.Net;
          using System.IO;    // for StreamReader
           
          namespace ConsoleApplication
          {
              class Program
              {
                  static void Main(string[] args)
                  {
                      //發(fā)送Get請(qǐng)求
                      var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
                      var response = (HttpWebResponse)request.GetResponse();
                      var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                      //發(fā)送Post請(qǐng)求
                      var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
                      var postData = "thing1=hello";
                          postData += "&thing2=world";
                      var data = Encoding.ASCII.GetBytes(postData);
                      request.Method = "POST";
                      request.ContentType = "application/x-www-form-urlencoded";
                      request.ContentLength = data.Length;
                      using (var stream = request.GetRequestStream())
                      {
                          stream.Write(data, 0, data.Length);
                      }
                      var response = (HttpWebResponse)request.GetResponse();
                      var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                  }
                 
              }
          }
          

          4、通過WebClient的方式發(fā)送請(qǐng)求

          C#中,WebClient類提供了一個(gè)簡(jiǎn)單的方法來(lái)發(fā)送和接收數(shù)據(jù)到和從一個(gè)URI(如一個(gè)網(wǎng)頁(yè)或Web服務(wù))上。

          適用平臺(tái):.NET Framework 1.1+, .NET Standard 2.0+, .NET Core 2.0+

          我們?cè)赪eb表單提交,常常需要選擇提交方法,這時(shí)我們會(huì)用到GET和POST方法。但關(guān)于它們之間的區(qū)別你又知道多少。今天我們就來(lái)了解它們
          

          兩方法其實(shí)是HTTP協(xié)議中的請(qǐng)求方法(關(guān)于HTTP協(xié)議可以閱讀之前我寫的《解密Web通信協(xié)議——超文本傳輸協(xié)議》)我們先通過一個(gè)例子來(lái)看看它們之間的區(qū)別。

          通過下面源代碼來(lái)查看:

          源代碼

          效果

          我們來(lái)看一下地址欄無(wú)輸入時(shí)為:

          file:///E:/~/~/Demo.html
          

          我們測(cè)試時(shí)用戶名和密碼都為123456789

          當(dāng)我們用GET方法提交地址欄變?yōu)椋?/p>

          file:///E:/~/~/Demo.html?textfield=123456789&password=123456789&submit=提交#Url
          

          再來(lái)看看post方法提交后為file:///E:/~/~/Demo.html#Url

          我們不難看出當(dāng)我們?cè)谳斎朊艽a時(shí)Get方法提交會(huì)把所有信息顯示到地址欄,這樣可以看出這樣提交信息不安全

          它們沒有很大區(qū)別都是TCP連接,但在HTTP規(guī)范不同和C/S限制導(dǎo)致它們有了區(qū)別如下:

          1. GET請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后,以?分割URL,參數(shù)之間以&相連,POST方法把提交的數(shù)據(jù)放在HTTP包中。
          2. GET的長(zhǎng)度受限于url的長(zhǎng)度,理論上GET的URL長(zhǎng)度可以無(wú)限長(zhǎng),但由于瀏覽器和服務(wù)器有限制。
          3. POST是沒有大小限制的,HTTP協(xié)議規(guī)范也沒有進(jìn)行大小限制,起限制作用的是服務(wù)器的處理程序的處理能力
          4. POST的安全性要比GET的安全性高前面已經(jīng)提到

          post和get的選擇

          私密性的信息請(qǐng)求使用post。

          查詢信息和可以想要通過url分享的信息使用get。

          如果有任何錯(cuò)誤和紕漏,請(qǐng)私信我更正。

          如果你有任何意見一定要私信告訴我,讓我快速成長(zhǎng)起來(lái)喲。


          主站蜘蛛池模板: 中文字幕一区二区三| 亚洲国产美国国产综合一区二区 | 亚洲av无码不卡一区二区三区 | 久久se精品一区精品二区| 中文字幕亚洲一区二区va在线| 另类一区二区三区| 综合无码一区二区三区四区五区| 国产精品一区二区三区久久| 国产一在线精品一区在线观看| 蜜桃臀无码内射一区二区三区| 色综合视频一区中文字幕| 一区在线观看视频| 久久精品视频一区二区三区| 成人精品一区二区三区校园激情 | 九九久久99综合一区二区| 97一区二区三区四区久久| 亚洲国产激情一区二区三区 | 伦理一区二区三区| 欧美亚洲精品一区二区| 在线观看国产一区| 综合一区自拍亚洲综合图区| 国产亚洲无线码一区二区| 无码国产精品一区二区免费式直播| 国产一区二区三区露脸| 无码精品人妻一区二区三区免费看| 国产伦精品一区二区三区免费下载| 亚洲国产精品一区二区成人片国内 | 国产成人久久一区二区三区 | 国产视频一区在线播放| 中文字幕久久亚洲一区 | 日本不卡在线一区二区三区视频| 欧美激情一区二区三区成人| 最美女人体内射精一区二区| 大帝AV在线一区二区三区| 精品国产亚洲一区二区三区| 一区二区三区四区在线观看视频| 日韩欧美一区二区三区免费观看| 三上悠亚日韩精品一区在线| 无码日韩AV一区二区三区| 精品一区高潮喷吹在线播放| 中文字幕人妻无码一区二区三区|