整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          不會接口測試?Postman輕松入門(四)-Post請求url格式請求體

          HTTP協議報文有了充分了解之后,上一節我們對get請求進行了詳盡的測試,由于get請求沒有請求體,相對來說比較簡單,接下來我們加上請求體,看看使用post接口如何完成各種不同類型請求體的請求操作。

          需要注意的是,post請求也并不一定都有請求體,遇到沒有請求體的post接口,處理方式和get請求完全一致。

          請求需要用到的四要素中:HTTP方法和url地址是顯而易見的;沒有特殊說明時,基本的請求頭不需要關注,Postman會自動添加;重點關注請求體以及與它配套的Content-Type頭域。

          常用的接口測試請求體的編輯格式包括如下幾種,和Content-Type頭域分別對應:

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

          這里的Content-Type頭域和請求體的關系,相當于快遞運輸時的運輸方式,比如請求體是水,就用常溫運輸,如果是冰,就需要冷藏的方式運輸了。

          接下來幾節,我們分別來看各種請求體格式應該如何使用Postman完成請求。

          urlencoded格式請求體實現請求

          請求示例:

          本例使用的接口為電商項目登錄接口,接口信息如下

            • 項目地址: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

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

          可以在fiddler或者其它抓包工具中查看請求參數的美化組織格式,上述請求體對應于webform格式下的請求體內容以表格形式顯示如下:

          Postman完成請求:

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

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


          注意不要把請求url地址的參數也填寫進來了,那些參數在Params菜單中。

          編輯完請求體之后可以查看Headers中的頭域信息,會發現除了基本頭域以外,加入了Content-Type和Content-Length兩個頭域,分別表示請求體的類型和長度。

          由此可見,當選擇x-www-form-urlencoded時,postman會自動在頭域中添加請求體相關的頭域參數設置。

          這里返回體格式直接以純文本形式當做HTML顯示,其中的中文內容還是未經處理的unicode編碼,可以通過切換返回體的格式下拉欄菜單為JSON,以美化后的格式顯示,并對中文等特殊符號進行轉碼。

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

          在Body菜單中選擇raw格式,然后將原始url編碼字符串直接粘貼進輸入欄中,發起請求會發現返回結果是請填寫賬號或密碼,說明我們的請求體內容中攜帶的用戶名密碼等信息并沒有被服務器接受。

          切換到Headers中查看,會發現其中的Content-Type并不是applicaiton/x-www-form-urlencoded,而是text/plain純文本格式的請求,因而才會導致請求體格式不被服務器接受。

          相當于服務器原本是希望收到冷凍起來的冰,而我們卻選擇了常溫運輸方式,服務器也就認為自己沒有收到需要的用戶名密碼。

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

          重新發送之后,就可以得到正確的請求結果了。

          希望本文對你有所幫助~~如果對軟件測試、接口測試、自動化測試、面試經驗交流感興趣可以私聊我或關注公眾號“特斯汀軟件測試”。免費領取最新軟件測試大廠面試資料和Python自動化、接口、框架搭建學習資料!技術大牛解惑答疑,同行一起交流。

          NET (C#) 中,發送 HTTP GET 和 POST 請求可以通過多種方式實現,主要依賴于 .NET Framework 或 .NET Core/5+ 的版本。.NET中提供了多種方法來發送HTTP請求,每種方法都有其優缺點。選擇哪種方法取決于具體需求和環境。

          1、HttpClient 類 (推薦)

          HttpClient 是 .NET 中處理 HTTP 請求的現代方法。它是線程安全的,支持異步操作,并且可以用于多個請求。

          適用平臺:.NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+

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

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

          HttpClient推薦使用單一實例共享使用,發關請求的方法推薦使用異步的方式,代碼如下,

          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)
                  {
                      //發送Get請求
                      var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
                      //發送Post請求
                      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、使用第三方類庫

          除了上述方法,還有許多第三方庫可以用于發送HTTP請求,例如 RestSharp 和 Flurl。這些庫通常提供更高級的功能,例如支持多種身份驗證方法和自動重試機制。

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

          Flurl.Http 是一個在 .NET 環境下使用的流行的 HTTP 客戶端庫。它提供了一個簡潔的 API 來創建 HTTP 請求,并支持異步操作。Flurl.Http 使得發送 HTTP 請求、接收響應、處理異常和解析數據變得非常簡單。

          命名空間: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";
          
                  // 發送GET請求
                  string htmlContent = await GetHtmlAsync(getUrl);
                  Console.WriteLine("GET請求結果:");
                  Console.WriteLine(htmlContent);
          
                  // 發送POST請求
                  var postData = new { Name = "John", Age = 30 };
                  var postResponse = await PostJsonAsync<object>(postUrl, postData);
                  Console.WriteLine("POST請求結果:");
                  Console.WriteLine(postResponse);
          
                  // 發送帶有查詢參數和頭信息的GET請求
                  string htmlContentWithHeaders = await GetHtmlWithHeadersAsync(getUrl);
                  Console.WriteLine("帶查詢參數和頭信息的GET請求結果:");
                  Console.WriteLine(htmlContentWithHeaders);
          
                  // 安全地發送GET請求
                  string safeHtmlContent = await SafeRequestAsync(getUrl);
                  Console.WriteLine("安全GET請求結果:");
                  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來安裝)

          RestSharp 是一個用于在 .NET 中發送 HTTP 請求的簡單 REST 和 HTTP API 客戶端。它可以用于構建和發送各種 HTTP 請求,并處理響應。

          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)
                  {
                       //發送Get和Post請求
                      RestClient client = new RestClient("http://example.com");//指定請求的url
                      RestRequest req = new RestRequest("resource/{id}", Method.GET);//指定請求的方式,如果Post則改成Method.POST
                      request.AddParameter("name", "value"); // 添加參數到 URL querystring
                      request.AddUrlSegment("id", "123"); //替換上面指定請求方式中的{id}參數
                      //req.AddBody(body); /*如發送post請求,則用req.AddBody ()指定body內容*/
                      //發送請求得到請求的內容
                      //如果有header可以使用下面方法添加
                      //request.AddHeader("header", "value");
                      IRestResponse response = client.Execute(request);
                      //上傳一個文件
                      //request.AddFile("file", path);
                      var content = response.Content; // 未處理的content是string
                      //還可以下面幾種方式發送請求
                      //發送請求,反序列化請求結果
                      IRestResponse response2 = client.Execute(request);
                      var name = response2.Data.Name;
                      //發送請求下載一個文件,并保存到path路徑
                      client.DownloadData(request).SaveAs(path);
                      // 簡單發送異步請求
                      await client.ExecuteAsync(request);
                      // 發送異常請求并且反序列化結果
                      var asyncHandle = client.ExecuteAsync(request, response => {
                          Console.WriteLine(response.Data.Name);
                      });
                      //終止異步的請求
                      asyncHandle.Abort();
                  }
                 
              }
          }
          

          3、WebRequest 和 WebResponse

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

          適用平臺:.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)
                  {
                      //發送Get請求
                      var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
                      var response = (HttpWebResponse)request.GetResponse();
                      var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                      //發送Post請求
                      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的方式發送請求

          C#中,WebClient類提供了一個簡單的方法來發送和接收數據到和從一個URI(如一個網頁或Web服務)上。

          適用平臺:.NET Framework 1.1+, .NET Standard 2.0+, .NET Core 2.0+

          我們在Web表單提交,常常需要選擇提交方法,這時我們會用到GET和POST方法。但關于它們之間的區別你又知道多少。今天我們就來了解它們
          

          兩方法其實是HTTP協議中的請求方法(關于HTTP協議可以閱讀之前我寫的《解密Web通信協議——超文本傳輸協議》)我們先通過一個例子來看看它們之間的區別。

          通過下面源代碼來查看:

          源代碼

          效果

          我們來看一下地址欄無輸入時為:

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

          我們測試時用戶名和密碼都為123456789

          當我們用GET方法提交地址欄變為:

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

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

          我們不難看出當我們在輸入密碼時Get方法提交會把所有信息顯示到地址欄,這樣可以看出這樣提交信息不安全

          它們沒有很大區別都是TCP連接,但在HTTP規范不同和C/S限制導致它們有了區別如下:

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

          post和get的選擇

          私密性的信息請求使用post。

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

          如果有任何錯誤和紕漏,請私信我更正。

          如果你有任何意見一定要私信告訴我,讓我快速成長起來喲。


          主站蜘蛛池模板: 日韩一区二区三区在线| 一区二区三区无码视频免费福利 | 无码8090精品久久一区| 色窝窝无码一区二区三区成人网站 | 国产成人精品视频一区二区不卡 | 国产大秀视频一区二区三区| 男插女高潮一区二区| 国产一区三区二区中文在线| 无码人妻精品一区二| 国产萌白酱在线一区二区| 亚洲日韩中文字幕无码一区| 亚洲综合一区二区| 97久久精品无码一区二区天美 | 免费无码一区二区三区| 国产在线无码一区二区三区视频 | 久久精品一区二区三区资源网| 一区二区三区高清视频在线观看| 成人毛片一区二区| 成人免费视频一区| 精品国产精品久久一区免费式| 中文字幕av日韩精品一区二区| 亚洲一区二区三区播放在线| 精品无码一区二区三区爱欲九九| 日韩精品一区二区三区色欲AV| 无码精品国产一区二区三区免费| 中文字幕一区二区三区在线不卡| 波多野结衣一区二区三区aV高清 | 91精品福利一区二区| 精品一区二区三区在线播放视频| 中文字幕一区二区三区精彩视频 | 影音先锋中文无码一区| 国产香蕉一区二区精品视频| 日韩av片无码一区二区不卡电影 | 国产成人一区二区三区视频免费 | 久久精品一区二区三区不卡| 日韩精品无码一区二区三区免费| 日韩一区二区在线播放| 风间由美在线亚洲一区| 色一情一乱一伦一区二区三区| 中文无码AV一区二区三区| 国产一区二区中文字幕|