c# - .net HttpClient post api 响应未正确呈现
问题描述
我正在尝试https://nayapatrikadaily.com/news-article/2/News
使用 HttpPost
请求从新闻站点获取 html 内容。
但是,在响应中,页面正在返回 Unicode 字符。
我在将 Unicode 字符转换为 html 时遇到了障碍。
网址:
var nayapatrika = await ApiClient.PostAsync("https://nayapatrikadaily.com/ajax/pagination.php");
后异步:
public static async Task<HtmlDocument> PostAsync(string uri)
{
string responseJson = string.Empty;
var htmlDocument = new HtmlDocument();
var handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
using (var client = new HttpClient(handler))
{
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
var content = new MultipartFormDataContent();
var values = new[]
{
new KeyValuePair<string, string>("perPage", "20"),
new KeyValuePair<string, string>("page", "2"),
new KeyValuePair<string, string>("cat", "1"),
};
foreach (var keyValuePair in values)
{
content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
}
var response = await client.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
responseJson = await response.Content.ReadAsStringAsync();
htmlDocument.LoadHtml(responseJson);
}
}
return htmlDocument;
}
在响应页面总是返回以下字符。
解决方案
反序列化 api 响应对我有用。正如我注意到的响应它有两个属性:newsList
和numPages
。
我创建了这个类:ResponseObj
public class ResponseObj
{
public string numPage { get; set; }
public string newsList { get; set; }
}
并解散成ResponseObj
var obj = JsonConvert.DeserializeObject<ResponseObj>(responseJson);
var response = await client.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
responseJson = await response.Content.ReadAsStringAsync();
var obj = JsonConvert.DeserializeObject<ResponseObj>(responseJson);
htmlDocument.LoadHtml(obj.newsList);
}
推荐阅读
- jenkins - 如何在构建后操作中优先运行 JOB NOTIFICATION 插件
- swift - 从 Xcode 中的另一个视图控制器文件中删除 UITableVIewCell
- javascript - 将 array.sort() 默认算法应用于数组中对象的字符串属性
- javascript - 单击按钮时如何更改插入符号?
- postgresql - 对于每个列表姓氏和他们监督的人,包括必须列出所有员工(即使是那些不监督任何人的人)
- java - Azure Functions - 如何使用默认“run()”方法中的“MultipartHttpServletRequest”类?
- sql - COUNT(*) 和 COUNT SQL 中的项目列表
- jmeter - JMeter 从站没有读取属性文件值
- ansible - 使用 ansible 比较 2 个 csv 文件
- sql-server - 为什么我不能在 sp_addextendedproperty 中使用内联表达式,但我可以使用变量?