Introduction
At various times I've needed to check what an HTTP server is receiving from a client system. This can be useful in many scenarios such as if an upstream system is posting data and you don't think it's sending what's expected. The code I present here is a diagnostic tool that lets you see what an HTTP client is sending through.Implementation
Design
As this will be a tool I want to use in a variety of environments I've gone for an individual Groovy script. This will let me copy it to a server and get it running quickly. Other than that I'm really just needing a bare-bones HTTP service and the ability to log what it receives.
This approach assumes that Groovy is installed on the server but, if needed, I could package up the compiled Groovy into a jar file and run it under a plain old Java VM.
Components
The following components are utilised in the solution:- Groovy
- Programming language
- Apache HTTPCore library
- Provides a library for developing HTTP services
Code
The code for this article is located in the Workbench Bitbucket repository.
The codebase consists of a single script (http.groovy
) to instantiate an HTTP server and log incoming requests.
To start the HTTP server I just run groovy http.groovy
but the following is also supported:
groovy http.groovy -h
- for usage infogroovy http.groovy -p <port>
- to change the server port
To send a request to the server I could use a number of tools (even a browser) but the following curl
examples are useful:
curl --data "param1=value1¶m2=value2" http://127.0.0.1:9999
- Performs a basic POST request with some query items
curl -G --data "param1=value1¶m2=value2" http://127.0.0.1:9999
- Performs a basic GET request with some query items
curl -d @test.xml --header "Content-Type:application/xml" http://127.0.0.1:9999
- POSTs an XML file
Discussion
I won't break down the script here as I've added enough information within the code. As a diagnostic tool it's important not to see the solution as universal. In its current state the script will provide basic information and, provided you're only POSTing a text-based file, should give you a starting point. I would generally copy this for each specific use and adapt the code (primarily theHttpHandler
class) to meet the incoming request.
No comments :
Post a Comment