2013-08-04 3 views
1

Я пытаюсь создать клиент WebSocket для подключения к существующему серверу (mtgox api).Как добавить заголовки при подключении к websocket в Haskell

В качестве отправной точки, чтобы выяснить подключения к WebSockets, я нашел этот пример кода https://github.com/jaspervdj/websockets/blob/master/example/client.hs

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

Обновление: Чтобы помочь в этом, я создал простой сервер веб-сервера. При подключении к нему через JavaScript WebSocket из моей консоли Chrome JavaScript, я вижу следующие заголовки:

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, поскольку это работает.

ответ

0

Вместо использования connect я connectWith, что позволяет заголовок «Origin» должен быть установлен. Хотя я не вижу, как добавлять любые другие заголовки, это то, что требует MtGox. Пока я предоставляю источник, с каким-то URL-адресом на основе http, он успешно соединяется.

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

Казалось бы, что это в основном необходимости добавлять какие-либо дополнительные заголовки, и, вероятно, поэтому не предусмотрено никакого механизма. Однако, глядя на source, это возможно, скопировав код connectWith и connectWithSocket, чтобы изменить заголовки, добавленные в объект Request.

0

Согласно ниже ответ, что это не возможно для заголовка WebSocket-протоколу, за исключением: HTTP headers in Websockets client API

+0

Этот вопрос касается отправки пользовательских заголовков с использованием Javascript WebSockets. Существуют стандартные заголовки, которые автоматически добавляются при использовании клиента JavaScript, и MtGox api требует их. –

Смежные вопросы