我試圖找出HttpClient
如何處理URL的一些不一致之處。HttpClient解碼編碼的網址?
我有以下的測試代碼:
public async Task TestHttpClient()
{
var baseUrl = "https://api.twitter.com/1.1/search/tweets.json";
//var query = "(cafe OR boulangerie)";
var query = "(café OR boulangerie)";
var url = baseUrl + $"?q={Uri.EscapeDataString(query)}";
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
await response.Content.ReadAsStringAsync();
}
代碼實際並不起作用,因爲我們需要身份驗證和其他的東西對Twitter的搜索。但它證明了我的問題。
變量url
將具有以下值: https://api.twitter.com/1.1/search/tweets.json?q=%28caf%C3%A9%20OR%20boulangerie%29
然而,看着提琴手的要求,我可以看到什麼是實際發送的是:https://api.twitter.com/1.1/search/tweets.json?q=(caf%C3%A9%20OR%20boulangerie)
那麼突然,在括號不再被編碼。這對我來說很重要,因爲我使用編碼的查詢字符串來計算我用來對Twitter進行身份驗證的簽名。所以我的簽名將有百分比編碼括號,並且請求不會,所以Twitter會拋出一個錯誤,並告訴我驗證失敗。
有趣的是,如果我用普通的e
而不是é
發送查詢,那麼括號就被編碼在請求中!像這樣:https://api.twitter.com/1.1/search/tweets.json?q=%28cafe%20OR%20boulangerie%29
我想這是某種錯誤HttpClient
?我能以某種方式解決這個問題嗎?
這應該無關緊要時,它應該忽略括號時,忽略它。 –
不確定你的意思@ m.rogalski?問題是我需要使用實際發送的查詢字符串來計算簽名。所以當我計算簽名時,我有%28和%29而不是(和)。發送的內容是(和)未編碼的,但只有當我使用字母é時! – Joel