【RestSharp】常用的几个请求方式

前言

经常用到,做个记录

代码

(1)Get-Request.Query取值

var url = "http://localhost:5000/api/RestSharp/TestGet";
var param = new Dictionary<string, string>
{
    { "User", "123456789@qq.com" },
    { "Pwd", "123$%^qwe..." },
};
var client = new RestClient(url);
RestRequest request = new() { Method = Method.Get };
foreach (var item in param)
{
    request.AddQueryParameter(item.Key, item.Value);
}
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

(2)Get-FromQuery取值

var url = "http://localhost:5000/api/RestSharp/TestGetQuery";
var param = new Dictionary<string, string>
{
    { "User", "123456789@qq.com" },
    { "Pwd", "123$%^qwe..." },
};
var client = new RestClient(url);
RestRequest request = new() { Method = Method.Get };
foreach (var item in param)
{
    request.AddQueryParameter(item.Key, item.Value);
}
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

(3)Post-Body-Json方式

var url = "http://localhost:5000/api/RestSharp/TestPostBodyJson";
var headers = new Dictionary<string, string>
{
    { "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" },
};
var param = new Dictionary<string, string>
{
    { "User", "123456789@qq.com" },
    { "Pwd", "123$%^qwe..." },
};
var client = new RestClient(url);
RestRequest request = new() { Method = Method.Post };
request.AddOrUpdateHeaders(headers);
request.AddHeader("Content-Type", "application/json");
var body = JsonSerializer.Serialize(param);
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

(4)Post-Body-Text方式

var url = "http://localhost:5000/api/RestSharp/TestPostBodyText";
var param = new Dictionary<string, string>
{
    { "User", "123456789@qq.com" },
    { "Pwd", "123$%^qwe..." },
};
var client = new RestClient(url);
RestRequest request = new() { Method = Method.Post };
request.AddHeader("Content-Type", "text/plain");
var body = string.Join("&", param.Select(p => WebUtility.UrlEncode(p.Key) + "=" + WebUtility.UrlEncode(p.Value)));
request.AddParameter("text/plain", body, ParameterType.RequestBody);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

(5)Post-Form

var url = "http://localhost:5000/api/RestSharp/TestPostForm";
var headers = new Dictionary<string, string>
{
    { "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" },
};
var param = new Dictionary<string, string>
{
    { "User", "123456789@qq.com" },
    { "Pwd", "123$%^qwe..." },
};
var client = new RestClient(url);
RestRequest request = new() { Method = Method.Post };
request.AddOrUpdateHeaders(headers);
foreach (var item in param)
    request.AddOrUpdateParameter(item.Key, item.Value);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);

(6)Post-Form-禁止重定向

示例场景:执行http请求后禁止重定向,然后取得响应response的Headers的内容

var url = "http://localhost:5000/api/RestSharp/Tokens";
var headers = new Dictionary<string, string>
{
    { "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" },
    { "X-Forwarded-For", "123.321.123.321" },
};
var param = new Dictionary<string, string>
{
    { "User", "123456789@qq.com" },
    { "Pwd", "123$%^qwe..." },
};
var client = new RestClient(url, options => { options.FollowRedirects = false; });
RestRequest request = new() { Method = Method.Post };
request.AddOrUpdateHeaders(headers);
foreach (var item in param)
    request.AddOrUpdateParameter(item.Key, item.Value);
RestResponse response = await client.ExecuteAsync(request);
if (((int)response.StatusCode) != 303)
    Console.WriteLine((int)response.StatusCode);
string location = response.Headers?.Where(x => x.Name == "Location").FirstOrDefault()?.Value ?? "";
Console.WriteLine(location);

(7)Post-Form-同域名使用Cookie

示例场景:先访问login进行登录,再访问checkin进行签到操作

var domain = "http://localhost:5000";
var headers = new Dictionary<string, string>
{
    { "origin", domain },
    { "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" },
};
var param = new Dictionary<string, string>
{
    { "email", "123456789@qq.com" },
    { "passwd", "123$%^qwe..." },
};
var client = new RestClient(jiChangDomainAccount.Domain, options => { options.CookieContainer = new CookieContainer(); });
//1、登录
RestRequest loginRequest = new("/auth/login") { Method = Method.Post };
loginRequest.AddOrUpdateHeaders(headers);
foreach (var item in param)
    loginRequest.AddOrUpdateParameter(item.Key, item.Value);
RestResponse loginResponse = await client.ExecuteAsync(request);
if (loginResponse.IsSuccessStatusCode)
{
    //2、签到
    var checkinRequest = new RestRequest("/user/checkin", Method.Post);
    checkinRequest.AddOrUpdateHeaders(headers);
    RestResponse checkinResponse = await client.ExecuteAsync(checkinRequest, cancellationToken);
    Console.WriteLine(checkinResponse.Content);
}

(8)Post-Form-多域名使用Cookie

private CookieContainer _cookieContainer = new CookieContainer();
private HttpClientHandler _httpClientHandler = new HttpClientHandler()
{
    CookieContainer = _cookieContainer,
    AutomaticDecompression = DecompressionMethods.All,
    UseCookies = true,
    ServerCertificateCustomValidationCallback = (_, _, _, _) => true,
};
private HttpClient _client = new HttpClient(_httpClientHandler);
private RestClient _restClient = new RestClient(_client);
var url = "http://localhost:5000/api/login";
var headers = new Dictionary<string, string>
{
    { "origin", domain },
    { "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" },
};
var param = new Dictionary<string, string>
{
    { "email", "123456789@qq.com" },
    { "passwd", "123$%^qwe..." },
};
RestRequest loginRequest = new(url) { Method = Method.Post };
loginRequest.AddOrUpdateHeaders(headers);
foreach (var item in param)
    loginRequest.AddOrUpdateParameter(item.Key, item.Value);
RestResponse loginResponse = await _restClient.ExecuteAsync(request);

后端响应代码

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading.Tasks;
using Tool.Utility.Standard.Models;
namespace WebTaskManageApi.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class RestSharpController : Controller
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public RestSharpController(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        [HttpGet]
        public async Task<ResponseDto<string>> TestGet()
        {
            var query = _httpContextAccessor.HttpContext.Request.Query;
            RestSharpDto dto = new RestSharpDto();
            foreach (var item in query)
            {
                if (item.Key == "User")
                    dto.User = item.Value;
                else if (item.Key == "Pwd")
                    dto.User = item.Value;
            }
            return new ResponseDto<string>
            {
                Code = 200,
                Data = dto.User,
            };
        }
        [HttpGet]
        public async Task<ResponseDto<string>> TestGetQuery([FromQuery] RestSharpDto dto)
        {
            return new ResponseDto<string>
            {
                Code = 200,
                Data = dto.User,
            };
        }
        [HttpPost]
        public async Task<ResponseDto<string>> TestPostBodyJson([FromBody] RestSharpDto dto)
        {
            var headers = _httpContextAccessor.HttpContext.Request.Headers;
            string userAgentKey = "User-Agent";
            string userAgent = string.Empty;
            if (headers.ContainsKey(userAgentKey))
            {
                userAgent = headers[userAgentKey];
            }
            return new ResponseDto<string>
            {
                Code = 200,
                Data = dto.User,
                Message = userAgent,
            };
        }
        [HttpPost]
        public async Task<ResponseDto<string>> TestPostBodyText()
        {
            string body = string.Empty;
            if (Request.ContentType == "text/plain")
            {
                using StreamReader reader = new StreamReader(Request.Body);
                body = await reader.ReadToEndAsync();
            }
            var headers = _httpContextAccessor.HttpContext.Request.Headers;
            string userAgentKey = "User-Agent";
            string userAgent = string.Empty;
            if (headers.ContainsKey(userAgentKey))
            {
                userAgent = headers[userAgentKey];
            }
            return new ResponseDto<string>
            {
                Code = 200,
                Data = body,
                Message = userAgent,
            };
        }
        [HttpPost]
        public async Task<ResponseDto<string>> TestPostForm([FromForm] RestSharpDto dto)
        {
            var headers = _httpContextAccessor.HttpContext.Request.Headers;
            string userAgentKey = "User-Agent";
            string userAgent = string.Empty;
            if (headers.ContainsKey(userAgentKey))
            {
                userAgent = headers[userAgentKey];
            }
            return new ResponseDto<string>
            {
                Code = 200,
                Data = dto.User,
                Message = userAgent,
            };
        }
    }
    public class RestSharpDto
    {
        public string User { get; set; }
        public string Pwd { get; set; }
    }
}

测试结果

{"code":200,"message":null,"data":"123$%^qwe..."}
{"code":200,"message":null,"data":"123456789@qq.com"}
{"code":200,"message":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 RestSharp/112.1.0.0","data":"123456789@qq.com"}
{"code":200,"message":"RestSharp/112.1.0.0","data":"User=123456789%40qq.com&Pwd=123%24%25%5Eqwe..."}
{"code":200,"message":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 RestSharp/112.1.0.0","data":"123456789@qq.com"}
posted @ 2024-12-23 11:18  我有我奥妙  阅读(329)  评论(0)    收藏  举报