Как да добавите заглавки при свързване към уеб гнездо в Haskell

Опитвам се да създам WebSocket клиент, за да се свържа със съществуващ сървър (mtgox api).

Като отправна точка, за да разбера свързването към WebSockets, намерих този примерен код https://github.com/jaspervdj/websockets/blob/master/example/client.hs

Проблемът е, че Mtgox изисква да се изпращат заглавки, когато се свързва, просто не съм сигурен как да ги изпратя.

Актуализация: За да помогна да реша това, създадох и прост сървър за уеб сокети. Когато се свържа с него чрез JavaScript WebSocket от моята JavaScript конзола на Chrome, виждам следните заглавки:

 requestHeaders = [("Upgrade","websocket"),("Connection","Upgrade"),
("Host","127.0.0.1:8001"),("Origin","chrome://newtab"),("Pragma","no-cache"),
("Cache-Control","no-cache"),("Sec-WebSocket-Key","yOsPEMHx9AyT9u3ssNma/Q=="),
("Sec-WebSocket-Version","13"),("Sec-WebSocket-Extensions","x-webkit-deflate-frame"),
("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36")]

Като има предвид, че когато се свързвам чрез клиента на Haskell, виждам само следните заглавки:

requestHeaders = [("Host","127.0.0.1"),("Connection","Upgrade"),
("Upgrade","websocket"),("Sec-WebSocket-Key","X3hMDW4fAau53dbz7w4MTw=="),
("Sec-WebSocket-Version","13")]

Не знам кои от заглавките всъщност се изискват от MtGox, но моят план беше просто да изпратя същите, които Chrome изпраща, тъй като това работи.


person Peter Hall    schedule 04.08.2013    source източник


Отговори (2)


Според отговора по-долу това не е възможно с изключение на заглавката на WebSocket-Protocol: HTTP заглавки в Websockets клиентски API

person Michael Lawton    schedule 04.08.2013
comment
Този въпрос е за изпращане на персонализирани заглавки с помощта на Javascript WebSockets. Има някои стандартни заглавки, които се добавят автоматично, когато използвате JavaScript клиент, а API на MtGox ги изисква. - person Peter Hall; 04.08.2013

Вместо да използвам connect използвах connectWith, което позволява да се зададе заглавката „Произход“. Въпреки че не виждам как да добавя други заглавки, това е това, което MtGox изисква. Докато предоставям произход, с някакъв http-базиран URL адрес, той се свързва успешно.

WS.connectWith "websocket.mtgox.com" 80 "/mtgox" (Just "http://anything") Nothing app

Изглежда, че е най-вече ненужно да се добавят допълнителни заглавки и вероятно затова не е осигурен механизъм. Въпреки това, гледайки източник, възможно е чрез копиране и поставяне на кода на connectWith и connectWithSocket да промените заглавките, които се добавят към обекта Request.

person Peter Hall    schedule 10.08.2013