nGrinder Recorder initiates JXBrowser and TCPProxy when the user starts nGrinder Recorder. A proxy is initiated with the default proxy port 10288. If the port is occupied by the other programs, it automatically selects the available port. Then this proxy port is assigned to JXBrowser instances(embeddable native web browser component). All requests from JXBrowsers go through the attached proxy port. The proxy monitors the messages sent to the proxy port and put the connection target information into ConnectionFilter component so that a user can select which messages should be recorded depending on the target web server. When a user starts recording, all messages which is not filtered are saved in HTTPRecording component. TCPProxy looks message contents both in requests and responses, and saves meaningful message information (like URL, HTTP headers and form data) into HTTPRecording component. Recording includes messages not only HTTP but also HTTPS as well.
However when you browse HTTPS web site, you may see alert message box. Basically HTTPS messages are protected by the certificate from the target web server. The proxy in the middle of messaging can not intercept HTTPS messages to see the message content in the normal way. TCPProxy which nGrinder Recorder is based on solves this by using the private certificate between the browser and TCPProxy. HTTPS messages between a browser and DelegateSSLEngine(in TCPproxy) is encoded by the private certificate issued by TCPProxy. Therefore DelegateSSLEngine can see the message contents. Then, it sends and receives the message to/from the target web server by encoding/decoding the requests/responses with the web server issued certificate. It causes the browser side warning message. See more details about this in Recoder Limitation.
When a user stop the recording, the recorded messages are analyzed to generate more generic script. In this step, the relations between requests/responses are linked as much as possible. Finally these are passed to HTTPRecordingResultProcessorWithFreeMarker component. Finally, HTTPRecordingResultProcessorWithFreeMarker processes them with the script template written in FreeMarker formats to generate Jython or Groovy scripts.