2016-07-07 7 views
2

私はquerystringパラメータに変換してhttpで送信する必要があるerlangのリストを持っています。 httpを介した送信は問題ありませんが、クエリーストリングのパラメータは必要な方法でフォーマットされていません。私は二つのことを試みた:スニペット2リストをerlangの文字列に変換してフォーマットします

スニペット1

error_logger:info_msg("~p", [Mylist]), %% ==> prints [<<"foo">>,<<"bar">>] 
Response = httpc:request("http://someserver/someaction?mylist=" ++ [Mylist]). 
%% ==> Server receives Mylist param as: 'foobar' but I want it to be 'foo/bar' 

error_logger:info_msg("~p", [Mylist]), %% ==> prints [<<"foo">>,<<"bar">>] IOList = io_lib:format("~p", [Mylist]), FlatList = lists:flatten([IOList]), Response = httpc:request("http://someserver/someaction?mylist=" ++ [FlatList]). %% ==> Server receives Mylist param as: '[<<"foo">>,<<"bar">>]' but I want it to be 'foo/bar' 

誰かが、私はすべてのアイテムを受け取ることができるように、リストを変換し、書式設定で私を助けることができます'/'文字で区切られたリストにある

ありがとうございます事前に

答えて

5

URLのリスト要素間に/文字を表示する場合は、そこに配置する必要があります。それを行う1つの方法は、lists:join/2である:

Response = httpc:request("http://someserver/someaction?mylist=" ++ lists:join("/", Mylist)). 

これは、私はそれをしようとしたとき私のために働いたhttpc:request/1へのURLの引数として渡された文字列とバイナリからなるiolistという、その結果が、以来、厳密には正しくありません。 httpc documentationにはURLの種類が文字列であると記載されています。それを達成するには、まずMylistでバイナリに変換し、文字列を取得するために参加した結果をフラット化することができます

Value = lists:flatten(lists:join("/", [binary_to_list(B) || B <- Mylist])), 
Response = httpc:request("http://someserver/someaction?mylist=" ++ Value). 

編集:lists:join/2のみのErlang/OTP 19.0以降で利用可能であることに注意を。古いリリースの場合は、代わりにstring:join/2を使用できますが、引数が逆になることに注意してください。すなわち、"/"のセパレータは最初の引数ではなく2番目の引数にする必要があります。

+2

最近の19.xでは 'lists:join/2'が追加されていることに注意してください。この場合、以前のリリースで 'string:join/2'を使うことができます。 –

+0

@DerekBrown:良い点 - これを書き留めるために投稿を編集しました。 –

関連する問題