1

URLがUnicode文字列の場合にhttpc:requestを使用するにはどうすればよいですか?

get_songs(Findstring) ->
application:start(inets),
application:start(crypto),
application:start(public_key),
application:start(ssl),       
Uf = normalize(Findstring),
Ufs = unicode:characters_to_list(Uf),
Token= "e...2",
Req1="https://api.vk.com/method/audio.search?q="++Ufs++"&access_token="++Token,
case httpc:request(get, {Req1,[]}, [], []) of
{ok, {{_Version, 200, _ReasonPhrase}, _Headers, Body}} ->
    Result = io_lib:format("~ts",[Body]),
    Result;
Resp ->
    Result = io_lib:format("response: ~p ~n", [Resp]),
    Result   
end.

FindstringをLatin1として送信すると、コードは正しく機能します。しかし、FindstringがUnicodeの場合、エラーが発生します。

クラッシャー:
最初の呼び出し:httpc_handler:init / 1
pid:<0.172.0> register_name
:[]
例外エラー: iolist_to_binary(["GET"、 ""、 [47,109,101,116,104,111,100,47,97,117、 100,105,111,46,115,101,97,114,99,104,63、1083,1086,1083,38,97,99,99,101,115,115、95,116,111,107,101,110,61,101,50,102,50、98,55,53,100,101,50,101,101,52,55,51,48 、 _ _







101,50,101,101,52,55,51,48,97,51,101,50、100,102,102,55,54,57,101,101,50,101,102、101,50,101,49,48,53,48,101,98,50,53,97、101

_
_ 50,49,51,50,98,98,55,98,100,56,57、101,99,55,56,53,101,99,50
]、
""、 "HTTP / 1.1"、 "\ r \ n" 、
"te:\ r \ nhost:api.vk.com \ r \ nconnection:keep-alive \ r \ n"、
"\ r \ n"、[]])

4

1 に答える 1

3

クエリ文字列パラメーターをurlencodeする必要があります,,,

Erlang HTTP(S) モジュールにそのような便利なルーチンが含まれていないのは奇妙に思えるかもしれませんが、モジュールの配置に関連している可能性があります (私は Erlang の第一人者ではありません)。

于 2012-11-27T17:31:27.713 に答える