Hello everyone!
I'm trying to connect to a service that uses Websockets (RFC 6455), specifically, Secure Websockets, that work over HTTPS
(this information will be useful later).
I've tried many ways of doing so, first, using a wss://
does not work. Of course, because SocketConnect
is meant for a raw TCP socket.
In[1]:= SocketConnect["wss://echo.websocket.org"]
During evaluation of In[1]:= SocketConnect::addrspec: The host specification echo.websocket.org is wrong because it is missing the port specification
Out[1]= $Failed
One workaround was to use :443
at the end to specify the "secure" port.
In[2]:= SocketConnect["echo.websocket.org:443"]
Out[2]= SocketObject["TCP-<<UUID>>"]
Which worked fine, but later on, when sending a "homemade" Opening Handshake (Section 1.3 from RFC6455), one big catastrophic thing happened, the SocketConnect works over HTTP
, and not HTTPS
. The following Cloudfare message told me a very unhappy message for me.
400 Bad Request - Plain HTTP request sent over HTTPS.
I've tried using the internal SocketLink
library, but with no success, because it doesn't work with HTTPS as well.
In[3]:= Needs["SocketLink`"] (* and some stuff i tried.. *)
Out[3]= ¯\_(ツ)_/¯ (* also uses HTTP, and crashes the kernel sometimes *)
My last resort would be to write a C external function for dealing with Websockets and Secure Websockets, but I'm here asking for any other possible and easier options.
So.. what should I do? Should I wait for a SecureSocketConnect
? Is there any workaround that does not involve using other programming languages? Any help would be extremely appreciated!
Thanks!
Pedro Cabral.