webspy from the dsniff package picks HTTP GET and POST requests from the wire, and massages them into browser remote commands to place from your own browser. Not quite what you're looking for (it's even in c), but this avoids the proxy, at least from the original user's perspective.
So what I'd do is try to embed the core logic of webspy in a perl script with Inline, and rather than repeat the request immediately in the original netscape remote-ish way, massage the data into a log file (changing the client IP(/hostname?) along the way to some parameterized value).
I'd suggest doing the whole thing in Perl really, but unfortunately libnids doesn't have perl bindings. Hmmm.