我正在尝试将POST请求(在某些网址上搜索某些内容)发送到特定网址,在c#中使用HttpClient,并且编码存在问题:使用“test”(代码下方)值工作正常,它给出了我搜索结果,并用另一个字母(“тест”)中的单词,它不给我结果。
顺便说一下,网站搜索工作正常。在第一种情况下,Firefox(Inspect Element - > Network - > POST request - > Parameters)显示如下参数:search:test,在第二种情况下显示:search:òåñò。我试图发送“òåñò”而不是“тест”但没有成功。我做错了什么?请帮忙。
try
{
using (var httpClient = new HttpClient())
{
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url);
httpRequestMessage.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36");
httpRequestMessage.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml");
List<KeyValuePair<string, string>> parameters = new List<KeyValuePair<string, string>>();
KeyValuePair<string, string> param = new KeyValuePair<string, string>("search", "test");
parameters.Add(param);
HttpContent httpContent = new FormUrlEncodedContent(parameters);
httpRequestMessage.Content = httpContent;
var response = await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false);
var responseBody = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
string respBodyEncoded = encoding.GetString(responseBody);
}
}
catch
{
}
答案 0 :(得分:0)
我的猜测是你不是用其他语言编码的URL。对于简单的US-ASCII字符,例如'test',URL编码不是必需的,但“тест”不在US-ASCII范围内,因此应该进行URL编码。
因此,在您的情况下,“тест”参数应为%D1%82%D0%B5%D1%81%D1%82
以下是针对网址的relvant RFC: https://www.ietf.org/rfc/rfc1738.txt
如果八位字节没有相应的图形,则必须对其进行编码 US-ASCII编码字符集中的字符,如果使用的话 相应的字符是不安全的,或者是相应的字符 保留用于特定URL中的其他解释 方案