C# 使用RestSharp实现Postman中的各种形式的请求

2023-11-12

一、导入命名空间

using RestSharp;
using Newtonsoft.Json;	// 用于JSON序列化/反序列化
using Newtonsoft.Json.Linq;	// 用于构建JSON对象

二、构建客户端

◆ 创建客户端对象

RestClient client = new RestClient();

◆ 设置当前URL

client.BaseUrl = new Uri("https://www.baidu.com/s");

◆ 设置响应超时

client.Timeout = -1;    // 永不超时

◆ 添加默认Header

client.AddDefaultHeader("HeaderKey", "HeaderValue");

◆ 添加单项Cookie

client.AddDefaultParameter("itemKey", "itemValue", ParameterType.Cookie);

◆ 添加多项Cookie

public void addClientCookies(ref RestClient client, string cookie)
{
    string[] cookie_items = cookie.Split(';');
    foreach (string cookie_item in cookie_items)
    {
        if (cookie_item.Trim().Length == 0) continue;
        string cookie_key = cookie_item.Substring(0, cookie_item.IndexOf('=')).Trim();
        string cookie_value = cookie_item.Substring(cookie_item.IndexOf('=') + 1).Trim();
        if (cookie_value.Contains(",")) cookie_value = $"\"{cookie_value}\"";
        client.AddDefaultParameter(cookie_key, cookie_value, ParameterType.Cookie);
    }
}
// 调用示例
addClientCookies(ref client, "item1=value1;item2=value2")

三、构建请求

◆ 创建请求对象

RestRequest request = new RestRequest(Method.GET); // Post请求:Method.POST

◆ 添加参数Header

request.AddHeader("HeaderKey", "HeaderValue");

◆ 添加单项Cookie

request.AddParameter("itemName", "itemValue", ParameterType.Cookie);

◆ 添加多项Cookie

public void addRequestCookies(ref RestRequest request, string cookie)
{
    string[] cookie_items = cookie.Split(';');
    foreach (string cookie_item in cookie_items)
    {
        if (cookie_item.Trim().Length == 0) continue;
        string cookie_key = cookie_item.Substring(0, cookie_item.IndexOf('=')).Trim();
        string cookie_value = cookie_item.Substring(cookie_item.IndexOf('=') + 1).Trim();
        if (cookie_value.Contains(",")) cookie_value = $"\"{cookie_value}\"";
        request.AddParameter(cookie_key, cookie_value, ParameterType.Cookie);
    }
}
// 调用示例
addRequestCookies(ref request, "item1=value1;item2=value2")

◆ 添加参数Params

request.AddQueryParameter("ParamKey", "ParamValue");

◆ 添加参数Body

> form-data和x-www-form-urlencoded

request.AddParameter("FormKey", "FormValue");

> JSON数据

// 构建需要提交的JSON数据:{"Name": "zhangsan", "Score": [81, 92, 86]}
JObject post_json = new JObject();
post_json.Add("Name", "zhangsan");
JArray score = new JArray() { 81, 92, 86 };
post_json.Add("Score", score);
// 序列化JSON数据
string post_data = JsonConvert.SerializeObject(post_json);
// 将JSON参数添加至请求中
request.AddParameter("application/json", post_data, ParameterType.RequestBody);

> File上传

request.AddFile("FileKey", @"F:\Demo.txt");	// 添加文件

四、执行Request请求

◆ JSON结果

IRestResponse response = client.Execute(request); // 执行请求
string res_text = response.Content; // 文本结果
JObject res_json = (JObject)JsonConvert.DeserializeObject(res_text); // JSON结果

◆ File下载

byte[] response = client.DownloadData(request);	// 执行请求
System.IO.File.WriteAllBytes(@"F:\Demo.txt", response);  // 将返回结果保存到文件

★ 小技巧 ★ :

  • 可以使用Fiddler来对比C# RestSharp发送的请求和Postman发送的请求,来测试添加的参数是否达到了同Postman一样的效果。
  • 对于同个平台下的多个请求,可共用一个Client发送请求,减少不必要的重复设置参数。此方式也可用在存在Cookie返回的场景。
  • 封装的AddCookies方法对于重复的Cookie键只能保留一个,例如淘宝的部分Cookie中含有两个_tb_token_参数,则需要添加代码去除掉没用的那个。

淘宝平台Sign算法

using System.Security.Cryptography;
using System.Text.RegularExpressions;
using System.Text;
public string md5(string inStr)
 {
     MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
     byte[] InBytes = Encoding.GetEncoding("utf-8").GetBytes(inStr);
     byte[] OutBytes = md5.ComputeHash(InBytes);
     string OutString = "";
     for (int i = 0; i < OutBytes.Length; i++)
     {
         OutString += OutBytes[i].ToString("x2");
     }
     return OutString;
 }
 public string get_sign(string t, string data, string token)
 {
     string appKey = "12574478"; //淘宝的APPkey
     string pre_sign = string.Format("{0}&{1}&{2}&{3}", token, t, appKey, data);
     return md5(pre_sign);
 }
// 从Cookie中匹配Sign算法中所需的token
string token = Regex.Match(cookie, @"_m_h5_tk=\w+_").Value.Trim('_').Replace("m_h5_tk=", "");
// 获取当前时间戳(Sign算法中所需的t参数)
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
string t = (Convert.ToInt64(ts.TotalSeconds * 1000)).ToString();
// JSON data处理(Sign算法中所需的data参数)
JObject post_json = new JObject();
string data = JsonConvert.SerializeObject(post_json);
// 生成Sign
string sign = get_sign(t, data, token);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 使用RestSharp实现Postman中的各种形式的请求 的相关文章

  • FileStream 构造函数和默认缓冲区大小

    我们有一个使用 NET 4 用 C 编写的日志记录类 我想添加一个构造函数参数 该参数可以选择设置文件选项 WriteThrough http msdn microsoft com en us library system io fileo
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • 关于回文串的几种常见算法总结

    目录 一 判断字符串为回文串 二 查找字符串中有多少个回文子串 1 暴力枚举 2 中心扩展法 3 动态规划 4 Manacher 马拉车 算法 三 回文子串最大长度 一 判断字符串为回文串 回文串 字符串反转后和原字符串相同同 比如aba
  • 第二章 分类模型-决策树知识点详细总结

    机器学习算法系列 第一章 分类模型 逻辑回归知识点详细总结 第二章 分类模型 决策树知识点详细总结第三章 分类模型 随机森林知识点详细总结第四章 分类模型 支持向量机SVM知识点详细总结第五章 关联分析 apriori算法知识点详细总结 目
  • 无人机三维建模(3) 航拍实景模型

    本来以为我这个工作算是航拍测绘 结果发现 测绘是有严格规定的 参考 http bbs dji com thread 113513 1 1 html 首先 个人是不允许进行航拍测绘活动的 必须是以公司为单位来进行的 并且测绘公司的要求很高 比
  • request.setCharacterEncoding 关于编码 概述

    request setCharacterEncoding 关于编码 概述 从Servlet2 3开始 支持客户端内容协商 服务端内容协商 很早就有 服务端在返回的数据中通过Content Type来指定返回的数据内容 在REST叫嚣的背景下
  • 华为OD机试,C语言实现:矩阵最大值

    矩阵最大值 题目描述 给定一个仅包含0和1的N N二维矩阵 请计算二维矩阵的最大值 计算规则如下 每行元素按下标顺序组成一个二进制数 下标越大越排在低位 二进制数的值就是该行的值 矩阵各行值之和为矩阵的值 允许通过向左或向右整体循环移动每行
  • Android 恢复出厂设置接口说明

    以下两种恢复出厂设置方案适用于8 0以上平台 方案一 主要是采用intent广播接口方式 方案二 主要是直接调引用RecoverySystem类 两种方案均验证有效 方案一 对应hide类型的intent的TAG定义 public stat
  • 重新在jupyter notebook中安装pytorch

    重新在jupyter notebook中安装pytorch 查看jupyter中所安装的包 尝试导入torch 进入notebook 安装pytorch 测试代码 查看jupyter中所安装的包 conda list 如果没有pytorch
  • 【Ware】火绒安全软件怎么禁止其开机自启?

    火绒安全软件 常被简称为火绒 是火绒公司推出的一款Windows操作系统下的个人计算机个人安全软件 功能主要有清除恶意软件 扫描电脑病毒 修补系统漏洞 清理系统垃圾 火绒剑 安全防护功能 自定义规则等 但很多人装了这款软件后会发现它开机自启
  • Java基础高频题

    1 JDK和JRE有什么区别 JDK Java Development Kit的简称 java开发工具包 提供了Java的开发环境和运行环境 JRE Java Runtime Environment的简称 java运行环境 为java的运行
  • 基于Rancher构建持续集成

    1 安装 部署持续集成环境 1 通过实训平台进入到操作系统界面 在 后输入docker pull docker io gogs gogs latest命令 拉取Gogs镜像 示例代码执行如图1所示 2 在 后输入docker pull do
  • Google学术打不开,简单方法汇总

    从5月27日开始 很多人反馈谷歌打不开 各种捉急中有木有 有些基于GMAIL查看订单邮件可是却打不开谷歌网页 各种蛋疼中有木有 部分公司除了业务员搜索客户使用谷歌外 也投了谷歌的广告推广 随着对谷歌的限制 连谷歌推广的后台也都无法打开了 目
  • android 应用可以定义多个theme,管理和应用多个主题和自定义主题修改的Android库...

    Scoops Android library for managing and applying multiple defined R style Theme themes at runtime for dyanically changin
  • Google TPU的发展历程与思考(一)

    Google TPU的架构与思考 TPU v1 2016年5月的开发者大会上 Google推出了自行研制的人工智能芯片Tensor Processing Unit TPU 五年后的2021年5月19日 Google 又推出了 TPU v4
  • 如何用地址栏查看网页的源代码

    如何在地址栏里输入命令查看目标网页的源代码 输入 view source http www baidu com 当然这只是一个例子 view source 后面 跟完整的url地址
  • java使用File类创建一个文件和遍历文件目录实例

    java使用File类创建一个文件 这个类的用处只涉及到文件的创建 修改和删除 并不对文件内部的内容进行其他操作 public class F public static void main String args File file ne
  • vue3.0+Ts+全局自定义指令实现动态按钮【操作】

    1 介绍 本文采用vue3 0 Ts 全局自定义指令实现动态按钮 操作 应用场景为后端发送动态菜单 操作 操作信息存放在路由的meta中并将路由存在vuex中 模板文件使用全局自定义指令动态判断是否显示该按钮 2 编写路由相关内容 2 1
  • 使用python进行十大排序算法图文详解【阅读数篇文章后集优】

    本文通过阅读 观看大量文章和视频 筛选出较优质的文章并实际运行 验证代码而作 文章部分内容进行了参考 阅读的大量文章中不乏水文 就算文章不错的也有部分错误 使得读者难以理解或理解错误 这也是我作此文的目的 文末附有这些我觉得比较好的文章的链
  • python目标检测答案_Python OpenCV 3 使用背景减除进行目标检测

    背景减除 Background Subtraction 是许多基于计算机视觉的任务中的主要预处理步骤 如果我们有完整的静止的背景帧 那么我们可以通过帧差法来计算像素差从而获取到前景对象 但是在大多数情况下 我们可能没有这样的图像 所以我们需
  • c语言判断格式是否IPv6

    int net is validipv6 const char hostname struct sockaddr in6 addr if hostname return 1 if strchr hostname return 1 暂时排除
  • C# 使用RestSharp实现Postman中的各种形式的请求

    目录 一 导入命名空间 二 构建客户端 创建客户端对象 设置当前URL 设置响应超时 添加默认Header 添加单项Cookie 添加多项Cookie 三 构建请求 创建请求对象 添加参数Header 添加单项Cookie 添加多项Cook