【发布时间】:2012-12-07 03:21:49
【问题描述】:
我用这段代码测试:
get_fee(Transaction,SourceNumber,Amount, Currency) ->
Url = lists:concat(["http://localhost/test.php","?transaction=", Transaction, "&saccount=", SourceNumber,Amount,"¤cy=",Currency]),
inets:start(),
{Flag, Response} = http:request(get, {Url, []}, [], []),
case Flag of
ok ->
{ { _, ReturnCode, _ }, _, Body } = Response,
if ReturnCode =:= 200 ->
{ok,{_,[{_,Code},{_,Permission},{_,Payer},{_,Payee}]}} = json:decode_string(Body),
case Permission of true ->
if Code =:= 200 ->
{ok,{Code, Payer, Payee}};
Code =:= 204 ->
{nok,{Code, not_found}};
true ->
{nok,{Code, parameter_error}}
end;
false ->
{nok,{Code, parameter_error}}
end;
true->
{error, http_error}
end;
error ->
case Response of
nxdomain -> {error, dns_error};
_ -> {error, network_error}
end
end.
http 的响应是:{"code":200,"permission":true,"fee_payer":0,"fee_payee":19}
但现在我喜欢做同样的想法,但在这种情况下 http 的返回例如是:
{"CIN":"08321224","Name":21}
所以在这种情况下我只有 CIN 和名称
我尝试改变以前的
get_fee(Num) ->
Url = lists:concat(["http://localhost/GTW/Operation.php","?ACCOUNT_NUM=", Num]),
inets:start(),
{Flag, Response} = http:request(get, {Url, []}, [], []),
case Flag of
ok ->
{ { _, ReturnCode, _ }, _, Body } = Response,
%% for debug
io:format("~p~n",[ReturnCode]),
if ReturnCode =:= "08321224" ->
{ok,{_,[{_,CIN},{_,Name}]}} = json:decode_string(Body),
case Name of 21 ->
io:format(CIN),
io:format(Name),
if CIN =:= "08321224"->
{ok,{CIN, Name}};
CIN =:= 204 ->
{nok,{CIN, not_found}};
true ->
{nok,{CIN, parameter_error}}
end;
false ->
{nok,{CIN, parameter_error}}
end;
true->
{error, http_error}
end;
error ->
case Response of
nxdomain -> {error, dns_error};
_ -> {error, network_error}
%% for debug
%%io:format("pass2~n ~p~n",[Response]),
end
end.
但它显示:
test:get_fee("0001").
200
{error,http_error}
【问题讨论】:
-
问题是什么?这是问答网站,而不是“我们帮助您查找错误”网站。
-
另外,该代码可能确实需要一些惯用的 Erlang。如果您以正确的措辞重新提出问题,我会尽力提供帮助,除非有人比我更胜一筹。
-
当我从http返回四个json格式的值时,第一个erlang函数起作用 {"code": 200, "permission": true, "fee_payer": 0, "fee_payee": 19}请求
-
现在我有一个 http 请求,它只返回 json 格式的两个值 {"CIN": "08321224", "Name": 21} 所以我想开发一个适用于这种类型的 erlang 函数返回值(只有两个http请求值)我想启发前一个函数(从第一个函数使用四个从http请求返回的值)我的问题是:我们如何更改erlang函数get_fee的代码为了处理我的新 http 请求(使用我的新概念)
-
你在使用 Erlang JSON Parser 库吗?如果是这样,您使用的是哪一个?我建议在您的问题中,您只需向我们展示 JSON 示例数据,然后我们将向您展示如何解析它。只需将 JSON 显示出来,然后我们将获取一个库并解析该数据,因此您可以在您的代码中执行相同的操作。