DataFlex
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
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