C# 使用HttpClient模拟请求的案例

时间:2021-05-19

情景描述

将一个时间转换为对应的unix时间戳,

字符集使用UTF-8编码,数据通讯统一采用 HTTP 协议通讯,使用POST 方法请求并传递参数。

POST请求Content-Type 设置为application/x-puteHash(Encoding.UTF8.GetBytes(sign)));}

使用HttpClient模拟请求

// 创建HttpClient实例var httpClient = new HttpClient();// 请求的时间,2020-10-01 08:10:30var requestTime = new MyDateTime{ Year = 2020, Month = 10, Day = 1, Hour = 8, Minute = 10, Second = 30,};// 设置HttpRequestMessage中的Content。// 请求入参,我们接口定义的入参是dateTime,所以这里的Key也是dateTimevar requestDic = new Dictionary<string, string>();requestDic.Add("dateTime", JsonConvert.SerializeObject(requestTime));var encodedContent = await new FormUrlEncodedContent(requestDic).ReadAsStringAsync().ConfigureAwait(false);var httpContent = new StringContent(encodedContent, Encoding.UTF8, "application/x-www-form-urlencoded");// 添加签名头var sign = await GenerateSign(requestTime);httpContent.Headers.Add("X-Sign", sign);// 生成Request的Messagevar httpRequestMessage = new HttpRequestMessage{ Method = HttpMethod.Post, // 请求方式 RequestUri = new Uri("http://localhost:5000/DateTime/GetTimeStamp"), // 请求地址 Content = httpContent, // 请求内容};// 在HttpRequestMessage中可以任意的添加请求头httpRequestMessage.Headers.Add("GitHub", "XgHao");// 发送请求var response = await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false);var timeStamp = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

捕获请求

这里我们使用Fiddler来捕获请求

可以看到,我们的签名及我们自己加的其他Header,还有计算返回的时间戳。

切换到WebForms可以看到请求的参数

说明使用HttpClient发送请求成功了。

如果Fiddler没能捕获请求,请考虑设置HttpClient的代理,具体参考这篇文章C# 如何使用Fiddler捕获本地HttpClient发出的请求

以上这篇C# 使用HttpClient模拟请求的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章