RestSharp๋ ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์ ์ ๋ฐ๋ผ ๋ณธ๋ฌธ์ ์์ ๋งค๊ฐ๋ณ์์์ ๊ณต๋ฐฑ์ %20
, +
, ๋๋ ์ ํ ์ธ์ฝ๋ฉํ์ง ์์ต๋๋ค.
RestSharp๋ ๋ณธ๋ฌธ์ ์์ ๋งค๊ฐ๋ณ์์ ๊ณต๋ฐฑ์ +
๋ก ์ธ์ฝ๋ฉํฉ๋๋ค.
" "
)๋ฅผ ๋ํ๊ธฐ ๋ฌธ์( "+"
)๋ก ์ธ์ฝ๋ฉํฉ๋๋ค.๋งค๊ฐ๋ณ์ ๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ผ ํ๋ ํ์ฌ API๋ฅผ ํธ์ถํ๊ณ ์์ต๋๋ค(์: VALUE1 VALUE2 VALUE3
, ์ธ์ฝ๋ฉ: param=VALUE1%20VALUE2%20VALUE3
). RestSharp๋ฅผ ์ฌ์ฉํ ๋ Uri.EscapeDataString()
๋ฐ HttpUtility.UrlEncode
์ ๋์์ ๋ค์๊ณผ ๊ฐ์ด ๋ค๋ฆ
๋๋ค.
Uri.EscapeDataString("ABC DEF")
> ABC%20DEF
HttpUtility.UrlEncode("ABC DEF")
> ABC+DEF
RestSharp๋ ์ด ๋ถ๋ถ์ ๋ํ ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ง์ ๋ฐฉ์์ ์ง์ํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ณธ ๋์์ ์ฌ์ ์ํ๊ธฐ ์ํด ๊ณ ์ ํ(์ ํ ์ฌํญ) ์ด์ค์ผ์ดํ/์ธ์ฝ๋ฉ/์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๋ก ํ์ฉํด์ผ ํฉ๋๋ค.
HTTP application/x-www-form-urlencoded ์ฌ์ ์๋ ๊ณต๋ฐฑ์ด +
๋ก ์ธ์ฝ๋ฉ๋์ด์ผ ํ๋ค๊ณ ์ธ๊ธ๋์ด ์์ง๋ง %20
๋ ์ฌ์์ ๋ฐ๋ฅด๋ฉฐ ๋ชจ๋ ํ์ฌ ์์คํ
์ด +
๋ฅผ ํ์ฉํ๋ ๊ฒ์ ์๋๋๋ค.
NB ์์ ๋ณธ๋ฌธ์ param=ABC%20DEF
๋ก ์ธ์ฝ๋ฉํ๊ธฐ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ด ๋ฌธ์ ์ ๋ํ ์ ์์ด๋ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ํ ์๋ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
REST ํธ์ถ์์ GET ๋งค๊ฐ๋ณ์์ ๋ํด '+'๊ฐ ์๋ '%20'๋ง ํ์ฉํ๋ API๋ฅผ ์๋ฐํ์ง๋ง ๊ทผ๋ณธ ์์ธ์ ๋์ผํฉ๋๋ค.
๋ช
๋ฐฑํ ํด๊ฒฐ์ฑ
์ $ UrlEncode
EscapeDataString
๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก EncodeParameter
์ ๋์์ ์ฌ์ ์ํ๋ ์ผ์ข
์ ๋ฐฉ๋ฒ์ ํ์ฉํ๋ ๊ฒ์
๋๋ค.
์ด์ ๋ํ ์คํ ์ค๋ฒํ๋ก(์: https://stackoverflow.com/questions/602642/server-urlencode-vs-httputility-urlencode)์ ๋ํ ๊ด๋ฒ์ํ ์ค๋ ๋๊ฐ ์์ง๋ง ๊ถ๊ทน์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๋์์ด ์ค์ ๋ก ๋ฌด์์ธ์ง ๋ช
ํํ์ง ์์ต๋๋ค. . ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๊ฒฝ์ฐ์๋ ํ์คํ ์ฌ๋ฐ๋ฅธ ๋์์ด ์๋ UrlEncode
๋ฅผ ํญ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํ์ํ ๊ฒ์ ์ ํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ๋งค์ฐ ํธ๋ฆฌํ ๊ฒ์
๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก Parameters
๋ฅผ ์ค์ ํ๋ ๊ฒ์ ์ฌ์ฉํ์ง ๋ง๊ณ ์๋์ผ๋ก ์ํํ์ญ์์ค.
์ด๊ฒ์ ๊ตฌํํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ต๋๋ค... ์๋ง๋ DefaultParameterEncoder
๊ฐ ์๋ HttpUtility.UrlEncode(...)
IParameterEncoder
์ธํฐํ์ด์ค๊ฐ ๊ธฐ๋ณธ ๊ตฌํ์ผ๋ก ์ค์ ๋์ด ์์ง๋ง ์ด๋๊ฐ์ ์ฌ์ ์. RestClient
์ ๋ฃ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๊น, ์๋๋ฉด IWebProxy
์์ฑ์ด ์ฌ๊ธฐ ์๋ ๊ฒ์ฒ๋ผ Http
์ ๋ฃ์ด์ผ ํฉ๋๊น?
๋ค์๊ณผ ๊ฐ์ด ํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
public Func<string, string> Encoder { get; set; } = s => HttpUtility.UrlEncode(s);
๋จ์ผ ๊ธฐ๋ฅ์ ๋ํ ์ธํฐํ์ด์ค๊ฐ ํ์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@qJake ์ด๋ ๊ฒ
https://github.com/restsharp/RestSharp/commit/62e95bd03a0c64ac3933b648be4ee18d6c220ad7#diff -fbb0205ba27639004072c041141c4459R133
/// <summary>
/// Allows to use a custom way to encode parameters
/// </summary>
/// <param name="encoder">A delegate to encode parameters</param>
/// <example>client.UseUrlEncoder(s => HttpUtility.UrlEncode(s));</example>
/// <returns></returns>
public IRestClient UseUrlEncoder(Func<string, string> encoder)
{
Encode = encoder;
return this;
}
@alexeyzimarev ๋ค! ๊ทธ๊ฒ์ ํ์์ ์ผ ๊ฒ์ ๋๋ค. ๐
๋ค์ ๋ฒ์ ์์ ์ถ์๋ฉ๋๋ค.