Sample code for 30+ languages & platforms
Visual FoxPro

WebSocket Connect through HTTP Proxy

See more WebSocket Examples

This example shows how to establish a WebSocket connection through an HTTP proxy server.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loRest
LOCAL loSocket
LOCAL lnBTls
LOCAL lnPort
LOCAL lnMaxWaitMs
LOCAL loWs
LOCAL lcResponseBody
LOCAL lnStatusCode

lnSuccess = 0

* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

* --------------------------------------------------
* This example borrows the code from the REST using HTTP Proxy example.
* We first use the Chilkat Socket object to establish a connection to the WebSocket server through an HTTP proxy.
* Next, the Rest object uses the Socket object for its connection.
* Finally, the WebSocket object uses the Rest object for its connection.  
* 

loRest = CreateObject('Chilkat.Rest')
loSocket = CreateObject('Chilkat.Socket')

* Set the HTTP proxy domain or IP address, and port.
loSocket.HttpProxyHostname = "192.168.1.79"
loSocket.HttpProxyPort = 808

* Provide authentication to the HTTP proxy, if needed.
loSocket.HttpProxyUsername = "HTTP_PROXY_LOGIN"
loSocket.HttpProxyPassword = "HTTP_PROXY_PASSWORD"
loSocket.HttpProxyAuthMethod = "Basic"

* Indicate that HTTP requests (i.e. the WebSocket opening handshake) will be sent over the socket.
* This is important for how the HTTP proxy connection is established.
loSocket.HttpProxyForHttp = 1

* Connect to the websocket server through the HTTP proxy.
lnBTls = 0
lnPort = 80
lnMaxWaitMs = 5000
lnSuccess = loSocket.Connect("some-websocket-server.com",lnPort,lnBTls,lnMaxWaitMs)
IF (lnSuccess <> 1) THEN
    ? "Connect Failure Error Code: " + STR(loSocket.ConnectFailReason)
    ? loSocket.LastErrorText
    RELEASE loRest
    RELEASE loSocket
    CANCEL
ENDIF

* Tell the Rest object to use the connected socket.
lnSuccess = loRest.UseConnection(loSocket,1)
IF (lnSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    RELEASE loSocket
    CANCEL
ENDIF

loWs = CreateObject('Chilkat.WebSocket')

* Tell the WebSocket to use this connection.
lnSuccess = loWs.UseConnection(loRest)
IF (lnSuccess <> 1) THEN
    ? loWs.LastErrorText
    RELEASE loRest
    RELEASE loSocket
    RELEASE loWs
    CANCEL
ENDIF

* Add the standard WebSocket open handshake headers that will be needed.
* (This adds the required HTTP request headers to the rest object.)
loWs.AddClientHeaders()

* Add any additional headers that might be desired.
* Two common WebSocketSpecific headers are "Sec-WebSocket-Protocol" and "Origin".
loRest.AddHeader("Sec-WebSocket-Protocol","x-some-websocket-subprotocol")
loRest.AddHeader("Origin","http://some-websocket-server.com")

* Do the open handshake.
lcResponseBody = loRest.FullRequestNoBody("GET","/something")
IF (loRest.LastMethodSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    RELEASE loSocket
    RELEASE loWs
    CANCEL
ENDIF

* If successful, the HTTP response status code should be 101,
* and the response body will be empty. (If it failed, we'll have a look
* at the response body..)
lnStatusCode = loRest.ResponseStatusCode
? "Response status code: " + STR(lnStatusCode)

IF (lnStatusCode <> 101) THEN
    ? lcResponseBody
    ? "-- Failed because of unexpected response status code."
    RELEASE loRest
    RELEASE loSocket
    RELEASE loWs
    CANCEL
ENDIF

* We have the expected 101 response, so let's now validate the 
* contents of the response, such as the value sent by the server in the
* Sec-WebSocket-Accept header. 
lnSuccess = loWs.ValidateServerHandshake()
IF (lnSuccess <> 1) THEN
    ? loWs.LastErrorText
    RELEASE loRest
    RELEASE loSocket
    RELEASE loWs
    CANCEL
ENDIF

? "WebSocket connection successful."

* The application may now begin sending and receiving frames on the WebSocket connection.
* (At this point, we're done with the rest and socket objects...)

? "Success."

RELEASE loRest
RELEASE loSocket
RELEASE loWs