Проблема с использованием клиентика web сервера Cowboy.

69 views
Skip to first unread message

Игорь Викторович Проць

unread,
Jul 23, 2013, 4:04:54 AM7/23/13
to erlang-i...@googlegroups.com
Суть:
на ковбой приходит post запрос с xml в body, который далее необходимо проксировать на адрес:порт, который вытягивается из отдельной ets по ключу (один из атрибутов в пришедшей xml). Дальнейшую передачу запроса делаю через клиентик ковбоя:

(Req и Path передаются в метод)

    {ok, Client} = cowboy_client:init([]),

    {Headers, _Req1} = cowboy_req:headers(Req),

    {Method, _Req3} = cowboy_req:method(Req),
    
    {ok, Body, _Req4} = cowboy_req:body(Req),
    
    {ok, Client2} = cowboy_client:request(Method, list_to_binary("xxxx.xxxx.xxxx.xxxx:YYYY" ++ Path), Headers, Body, Client),

    {ok, Code, Headers1, Client3} = cowboy_client:response(Client2),

Запрос проксируется на Apache Tomcat, на котором крутится приложение, осуществляющее манипуляции с вложеной xml. Томкат постоянно отдает 400-ю ошибку и не хочет принимать запрос. 
Запрос на ковбой формирую рестклиентом из firefoxa.
В чем может быть проблема???

Сергій Костюшкін

unread,
Jul 23, 2013, 6:27:03 AM7/23/13
to
Если запрос напрямую работает нормально, то самый простой способ, это залогировать запрос на входе и запрос на выходе твоего приложения, и найти отличия. 

Вівторок, 23 липня 2013 р. 11:04:54 UTC+3 користувач Игорь Викторович Проць написав:

Игорь Викторович Проць

unread,
Jul 23, 2013, 10:53:17 AM7/23/13
to erlang-i...@googlegroups.com
Сравнил входящий и исходящий запросы, нашел дублирование хедеров, удалил их:
    {Headers, _Req1} = cowboy_req:headers(Req),
    Headers_new = lists:keydelete(<<"host">>, 1, Headers),
    Headers_new1 = lists:keydelete(<<"user-agent">>, 1, Headers_new),
    Headers_new2 = lists:keydelete(<<"content-length">>, 1, Headers_new1),
Все получилось, сервер возвращает корректный ответ.
Reply all
Reply to author
Forward
0 new messages