8

私はHttpClientを使用しています。Web フォーム パラメータを使用して投稿しています。値の 1 つ (名前ではない) は、外国語のスウェーデン文字 ö , #246 です。ö ASCII: ラテン小文字 O ウムラウト

手動で、IE、Firefox、および Chrome はすべてこの文字を S%F6k に変換し、すべて正常に動作します。ただし、VS 2012 C# リリースでは、(FormUrlEncodedContent(dict) を介して) %C3%B6 に変換されます。

VS 2012 に、わかりやすい S%F6k に変換するように指示する方法はありますか (それでも HttpClient を使用します)。

他の人に役立つ可能性のあるほとんどのコードを添付しました(Cookie、プロキシなど...)

// Create Handler
var handler = new HttpClientHandler();

// Cookies
var cc = new CookieContainer();
handler.CookieContainer = cc;

// Proxy - for fiddler
WebProxy proxy = new WebProxy();
proxy.Address = new Uri("http://localhost:8888");
handler.Proxy = proxy;

// Create the client
var client = new HttpClient(handler);

var request4 = new HttpRequestMessage();

client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Add("Accept", "text/html, application/xhtml+xml, */*");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.8,sv-SE;q=0.5,sv;q=0.3");
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");

// Form Data
var dict4 = new Dictionary<string, string>
{
    { "page", "kantlista" },
    { "kod", "A0004n" },
    { "termin", "H12" },
    { "anmkod", "17113" },
    { "urval", "ant" },
    { "listVal", "namn" },
    { "method", "Sök" } // S%F6k
}; // dict

request4.Content = new FormUrlEncodedContent(dict4);

var value4 = new FormUrlEncodedContent(dict4);
string uri4 = "https://www.ltu.se/ideal/ListaKursant.do";
var response4 = await client.PostAsync(uri4, value4);
response4.Headers.Add("Cache-Control", "no-cache")
response4.EnsureSuccessStatusCode();
string responseBody4 = await response4.Content.ReadAsStringAsync();
4

3 に答える 3

11

FormUrlEncodedContentフォーム データを utf8 エンコーディングでクラス エンコードします。クラスを
試してエンコードしてください。ByteArrayContentHttpUtility.UrlEncode(String, Encoding)

于 2012-12-12T04:00:12.457 に答える