Sample code for 30+ languages & platforms
Lua

Duplicate Python websockets

See more WebSocket Examples

Demonstrates how to duplicate the following Python client-side websocket snippet:
async with websockets.connect('ws://192.168.1.35/websocket') as websocket:
await websocket.send("http.controller_login:username=xxx&password=xxxxx")
response = await websocket.recv()

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

-- In Python, the following line of code does more than just connect:
--
--      websockets.connect('ws://192.168.1.35/websocket')
--
-- It is connecting to 192.168.1.35 without using TLS.  If the URI starts with "wss://", then TLS should be used.
-- But this URI begins with just "ws:/", so no TLS.

-- Also, after connecting, a GET request is sent to the /websocket endpoint.
-- In summary, the websockets.connect function is establishing the connection and it sends a GET request.

-- First establish the connection.
-- No TLS, use the default HTTP port 80.
local rest = chilkat.Rest.new()
local success = rest:connect("192.168.1.35", 80, false, false)
if not success then
    print(rest.last_error_text)
    return
end

local ws = chilkat.WebSocket.new()

-- Tell the WebSocket to use this connection.
success = ws:use_connection(rest)
if not success then
    print(ws.last_error_text)
    return
end

-- Add the standard WebSocket open handshake headers that will be needed.
-- (This adds the required HTTP request headers to the rest object.)
ws:add_client_headers()

-- Now send the GET request to /websockets.
local responseBody = rest:full_request_no_body("GET", "/websockets")
if not rest.last_method_success then
    print(rest.last_error_text)
    return
end

-- 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..)
local statusCode = rest.response_status_code
print("Response status code: " .. statusCode)

if statusCode ~= 101 then
    print(responseBody)
    print("-- Failed because of unexpected response status code.")
    return
end

-- We have the expected 101 response, so let's now validate the
-- contents of the response.
success = ws:validate_server_handshake()
if not success then
    print(ws.last_error_text)
    return
end

print("WebSocket connection successful.")

-- The application may now begin sending and receiving frames on the WebSocket connection.

-- The 1st frame sent by the Python snippet is:
--
--     websocket.send("http.controller_login:username=xxx&password=xxxxx")
--

-- Send the same using Chilkat, and get the response.
local finalFrame = true
success = ws:send_frame("http.controller_login:username=xxx&password=xxxxx", finalFrame)
if not success then
    print(ws.last_error_text)
    return
end

-- Read an incoming frame.
success = ws:read_frame()
if not success then
    print("Failed to receive a frame")
    print("ReadFrame fail reason = " .. ws.read_frame_fail_reason)
    print(ws.last_error_text)
    return
end

-- Show the string that was received.
local receivedStr = ws:get_frame_data()
print("Received: " .. receivedStr)

-- Continue with whatever additional communications are desired...
-- ....
--