Sample code for 30+ languages & platforms
DataFlex

Demonstrates KeepSessionLog and SessionLog

The Chilkat Socket component provides properties for keeping a session log making it possible to see the exact bytes received and sent on a TCP/IP or SSL/TLS connection. To enable session logging, set the KeepSessionLog property = _TRUE_. The SessionLogEncoding property controls how binary, non-printable bytes are represented in the log. There are two possible settings: Possible values are "esc" and "hex". The default value is "esc".

When set to "hex", the bytes are encoded as a hexidecimalized string. The "esc" encoding is a C-string like encoding, and is more compact than hex if most of the data to be logged is text. Printable us-ascii chars are unmodified. Common "C" control chars are represented as "\r", "\n", "\t", etc. Non-printable and byte values greater than 0x80 are escaped using a backslash and hex encoding: \xHH. Certain printable chars are backslashed: SPACE, double-quote, single-quote, etc.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSocket
    Boolean iTls
    Integer iMaxWaitMillisec
    Variant vBinData
    Handle hoBinData
    String sHttpHeader
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // This example assumes the Chilkat Socket API to have been previously unlocked.
    // See Socket Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatSocket)) To hoSocket
    If (Not(IsComObjectCreated(hoSocket))) Begin
        Send CreateComObject of hoSocket
    End

    // Enable session logging:
    Set ComKeepSessionLog Of hoSocket To True
    Set ComSessionLogEncoding Of hoSocket To "esc"

    Move True To iTls
    Move 20000 To iMaxWaitMillisec
    Get ComConnect Of hoSocket "www.chilkatsoft.com" 443 iTls iMaxWaitMillisec To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSocket To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Send a GET start line to the web server..
    Get ComSendString Of hoSocket "GET /abc123.abc123 HTTP/1.1" + (character(13)) + (character(10)) To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoSocket To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Send some bytes that will cause an error...
    Get Create (RefClass(cComChilkatBinData)) To hoBinData
    If (Not(IsComObjectCreated(hoBinData))) Begin
        Send CreateComObject of hoBinData
    End
    Get ComAppendEncoded Of hoBinData "01020304" "hex" To iSuccess
    Get pvComObject of hoBinData to vBinData
    Get ComSendBd Of hoSocket vBinData To iSuccess

    // Read the response up to the first double CRLF:
    Get ComReceiveUntilMatch Of hoSocket (character(13)) + (character(10)) + (character(13)) + (character(10)) To sHttpHeader
    Get ComLastMethodSuccess Of hoSocket To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoSocket To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Close the connection with the server
    // Wait a max of 20 seconds (20000 millsec)
    Get ComClose Of hoSocket 20000 To iSuccess

    // Display the session log:
    Get ComSessionLog Of hoSocket To sTemp1
    Showln sTemp1

    // The Session log will show the exact bytes sent and received.
    // In this case, the session log shows:

    // 	SendString: GET\x20/abc123.abc123\x20HTTP/1.1\r\n
    // 		
    // 	SendBytes: \x01\x02\x03\x04
    // 	ReceiveUntilMatch: HTTP/1.1\x20400\x20Bad\x20Request\r\n
    // 		Content-Type:\x20text/html;\x20charset=us-ascii\r\n
    // 		Server:\x20Microsoft-HTTPAPI/2.0\r\n
    // 		Date:\x20Thu,\x2027\x20Oct\x202016\x2013:16:02\x20GMT\r\n
    // 		Connection:\x20close\r\n
    // 		Content-Length:\x20339\r\n
    // 		\r\n
    // 		<!DOCTYPE\x20HTML\x20PUBLIC\x20\"-//W3C//DTD\x20HTML\x204.01//EN\"\"http://www.w
    // 		3.org/TR/html4/strict.dtd\">\r\n
    // 		<HTML><HEAD><TITLE>Bad\x20Request</TITLE>\r\n
    // 		<META\x20HTTP-EQUIV=\"Content-Type\"\x20Content=\"text/html;\x20charset=us-ascii
    // 		\"></HEAD>\r\n
    // 		<BODY><h2>Bad\x20Request\x20-\x20Invalid\x20Header</h2>\r\n
    // 		<hr><p>HTTP\x20Error\x20400.\x20The\x20request\x20has\x20an\x20invalid\x20header
    // 		\x20name.</p>\r\n
    // 		</BODY></HTML>\r\n
    // 


End_Procedure