Revision history for Perl extension HTTP::Proxy
0.20 Fri Aug 18 10:25:11 CEST 2006
[ENHANCEMENTS]
- Added a will_modify() method to HTTP::Proxy::BodyFilter, that
lets the proxy know if a filter may modify the content length,
thus closing RT ticket #21051 (Chris Dolan)
- If no filter in the current stack will modify the content length,
then the header is not removed
[FIXES]
- closed RT tickets #3184 and #20251 (chunked encoding was enforced
while transfering data between a client and server using
different versions of HTTP, causing unwanted garbage to appear
in the data)
- removed useless "ERROR: Getting request failed:" messages
when there are simply "No more requests from this connection"
[INTERNALS]
- Removed the HTTP::Proxy::FilterStack class from inside HTTP::Proxy
and put it in its own module file
- renamed HTTP::Proxy::FilterStack::active() as will_modify() for
consistency reasons
[TESTS]
- updated t/22http.t and t/23connect.t following Ken Williams'
recommandations in RT ticket #19986
[DOCUMENTATION]
- patched a small inconsistency in HTTP::Proxy::BodyFilter's
documentation (and closed RT ticket #20303)
- fully documented HTTP::Proxy::FilterStack
0.19 Fri Apr 28 19:55:41 CEST 2006
[ENHANCEMENTS]
- HTTP::Proxy::HeaderFilter::simple now lets one define an
end() method as well
[FIXES]
- HTTP::Proxy::(Body|Header)Filter::simple now provide a default
filter() that does nothing if their constructor is not given one
(thanks to Merijn Brand)
- close RT ticket #14548 by correcting the 'filename' check
in HTTP::Proxy::BodyFilter::save (Max Maischein)
- ERROR messages are always logged (Mark Tilford)
[TESTS]
- more tests for log() and logmask() in t/11log.t
0.18 Sun Mar 19 23:49:38 CET 2006
[ENHANCEMENTS]
- the new known_methods() method can return all method
names know to HTTP::Proxy (can be helpful with the
method parameter of push_filter())
[FIXES]
- close RT ticket #14898 by using a per-parent lockfile for
HTTP::Proxy::Engine::ScoreBoard (Chris Dolan)
- close RT ticket #18243 by adding missing DeltaV methods
(Stephen Steneker)
[EXAMPLES]
- eg/perlmonks.pl - redirect perlmonks.com to perlmonks.org
0.17 Wed Sep 28 23:25:17 CEST 2005
[ENHANCEMENTS]
- Thanks to Randal Schwartz, a new HTTP::Proxy::Engine::ScoreBoard
engine is available. I've benchmarked a twofold speed increase.
This engine is still beta, you must enable it by hand.
0.16 Thu Sep 1 19:13:55 CEST 2005
[ENHANCEMENTS]
- the new HTTP::Proxy::Engine class and its subclasses
now handle the life and death of child processes
- the Content-Length header is now removed only if body
filters will be applied on the response body
- HTTP::Proxy now supports some Apache-like attributes
(start_servers, max_clients, max_requests_per_child,
min_spare_servers, max_spare_servers, keep_alive,
max_keep_alive_requests, keep_alive_timeout)
- added support for ALL WebDAV/DeltaV methods
- the query argument to push_filter(), added in 0.14, should
now work (thanks to Simon Cozens for spotting the problem)
- the proxy now has a stash, which is a hash where filters can
store data (possibly to share it). (Requested by Mark Fowler)
Warning: since the proxy forks for each TCP connection, the
data is only shared between filters in the same child process.
[DEPRECATION]
- the maxchild, maxconn and maxserve accessors are now
deprecated. They will disappear in the future:
+ maxchild has no replacement (should be handled by the engine)
+ maxconn becomes max_connections
+ maxserve becomes max_keep_alive_requests
- Information regarding the way the engine should behave
must passed in the constructor or directly to the engine
[NEW METHODS]
- $proxy->engine() return the HTTP::Proxy::Engine instance
- $proxy->new_connection() increase the TCP connections counter
(should only be used by HTTP::Proxy::Engine object)
[FIXES]
- Makefile.PL was not playing nice with Build.PL in the
previous distributions. This has been fixed. Sorry for the
inconvenience
- no more annoying "getsockname() on closed socket GEN0"
warnings (they appeared in 0.14)
[Win32 SUPPORT]
- Win32 is now supported! badly supported, but supported...
- until someone writes a decent engine for Win32, the default
Win32 engine will be HTTP::Proxy::Engine::NoFork, which
can only handle a single TCP connection at a time
[EXAMPLES]
- eg/yahoogroups.pl - removes ad interruptions from Yahoo! Groups
- eg/https.pl - peek/poke at encrypted web pages
- eg/logger.pl - improved the logger script
0.15 Tue Apr 5 21:17:40 CEST 2005
[ENHANCEMENTS]
- added support for WebDAV methods (requested by Christian Laursen)
- The filter selection is based on the original request and response,
as it should
- improved kwalitee
[DEPRECATION]
- the start() method is no longer supported in HTTP::Proxy::BodyFilter
subclasses. Use begin() instead.
[EXAMPLES]
- eg/pdf.pl - save \.pdf files and send a HTML confirmation instead
(idea by Emmanuel Di Prétoro)
0.14 Tue Mar 29 11:40:51 CEST 2005
[ANNOUNCE]
- It's been more than a year since last release, which is bad.
I now plan to release new versions more often, maybe about
once a month, or when there are big changes.
[DEPRECATION]
- the start() method of HTTP::Proxy::Bodyfilter subclasses
is renamed begin(), since it now has an end() counterpart.
(On a related note, I improve my English. Be sure to check out
http://www.landgren.net/perl/lt-2004.html for details)
- start() in filters is therefore declared deprecated, an error
message is logged. The start() method will not be called any
more as from 0.15.
- the FILTER constant is now named FILTERS. FILTER will disappear
in 0.15 as well.
[ENHANCEMENTS]
- subclasses of HTTP::Proxy::BodyFilter can now have a
finalisation method, named end()
- the start^Wbegin() method of HTTP::Proxy::BodyFilter subclasses
now receive the message as an argument
- new built-in filter: HTTP::Proxy::BodyFilter::save
that can save the message body to a file while browsing
- new built-in filter: HTTP::Proxy::BodyFilter::complete
that stores the message body in memory and passes it on to the
next filters only when it's complete
- logs have cleaner prefixes and the pid is always shown
- should work under 5.005_03 (Thanks to Mathieu Arnold)
- transparent proxying support (mostly to please Martin Zdila
and Paul Makepeace)
- push_filter() should now accept the query parameter
[FIXES]
- the FILTER constant is now named FILTERS
[BUGS]
- the proxy does not work under Win32, except if you force
maxchild to 0 (no forking at all).
- t/20dummy.t (and a few otrhers) hanged under Win32
+ Ken Hirsch proposed a patch for HTTP::Daemon
(and a workaround for HTTP::Proxy's daemon object)
+ Bruno De Fraine tracked down the problem to the fork()
emulation by Windows threads under Win32 that lead to
a deadlock.
=> both explanations cover the same problem, which I haven't
been able to correct yet
- all the tests that fork a proxy and a server are therefore
skipped under Win32. This is ugly, and will change in the future.
[EXAMPLES]
- eg/rfc.pl - save rfc\d+\.txt files as we browse them
- eg/js.pl - save \.js files as we browse them
- eg/dragon.pl - enhance the Dragon Go Server web site
- eg/fudd.pl - make the web tawk wike Ewmer J. Fudd
- eg/switch.pl - switch proxies as you browse
- Changed all the examples so that they can take HTTP::Proxy::new()
parameters on the command-line (so, call them with logmask 3,
for example)
[DOCUMENTATION]
- documentation for the filter initialisation methods
- removed all references to the so-called "store-and-forward"
mechanism (see HTTP::Proxy::BodyFilter::complete)
0.13 Wed Mar 3 17:36:31 CET 2004
[ENHANCEMENTS]
- CONNECT support (but only transparently...)
- the client_headers() method (similar to hop_headers()) give
the filters access to the proxy's LWP::UA Client-* headers
- filters are applied on all supported methods by default
[FIXES]
- removed everything regarding control() and control_regex(),
which were not used and confusing
[TESTS]
- tests for CONNECT support
- tests for SSL support (not working yet)
[EXAMPLES]
- eg/adblock.pl - a very simple adblocker
- eg/trim.pl - trims whitespace from HTML pages
- eg/javascript.pl - add any text right after <body>
[DOCUMENTATION]
- separate COPYRIGHT and LICENSE sections in all man pages
0.12 Thu Jan 22 23:54:03 CET 2004
[ENHANCEMENTS]
- send the error message to the client when the Proxy agent dies
(usually because of a filter error)
- the proxy now sends a X-Forwarded-For header by default
(and the proxy method x_forwarded_for can toggle this)
- the proxy method client_socket() gives access to the socket
connected to the current client (the example in Changes for 0.10
was wrong: one can get the IP address of the connected agent from
inside a filter with $self->proxy->client_socket->peerhost)
[FIXES]
- do not block simultaneous connections when not forking
- clean up the filter chain after the body-request filters
- ensure the filter stack is reinitialised between requests
[TESTS]
- tests for X-Forwarded-For
- test the proxy against http://diveintomark.org/tests/client/http/
[EXAMPLES]
- eg/post.pl - outputs the URI and parameters of all POST requests
- eg/logger.pl - outputs details of GET and POST requests
0.11 Fri Jan 2 17:02:08 CET 2004
[ENHANCEMENTS]
- setting maxchild to 0 prevents forking (Jim Cromie)
- filters can now match on the query string
- hop-by-hop headers and Max-Forwards headers are correctly supported
- new mutators added to HTTP::Proxy: via, hop_headers, request,
response
- filters can now answer in place of the server, which allows
for authorisation filters, cache (?) filters, etc.
- new examples scripts: proxy-auth.pl
[FIXES]
- push_filter() now correctly supports several match criteria
[TESTS]
- all the Via: header tests are now in t/50via.t
- t/50standard.t now checks headers for several request types
- new tests:
+ t/51simple2.t - check response header filters with an actual proxy
+ t/61simple2.t - check response body filters with an actual proxy
[INTERNALS]
- new method _send_response_headers
0.10 Wed Nov 19 01:36:59 CET 2003
*** MAJOR INTERFACE CHANGES ***
- new base classes HTTP::Proxy::HeaderFilter and
HTTP::Proxy::BodyFilter
- some useful built-in filter classes:
HTTP::Proxy::BodyFilter::htmlparser
HTTP::Proxy::BodyFilter::htmltext
HTTP::Proxy::BodyFilter::lines
HTTP::Proxy::BodyFilter::simple
HTTP::Proxy::BodyFilter::tags
HTTP::Proxy::HeaderFilter::simple
HTTP::Proxy::HeaderFilter::standard
- tests for the internal class HTTP::Proxy::FilterStack
- tests for the built-in filters
- the examples are up-to-date with the new interface
- new/enhanced accessors:
+ the proxy host() attribute becomes actually useful: by default,
the proxy is only usable by local user-agents (the socket
is bound to localhost)
+ the filters proxy() accessor gives access to the proxy itself.
For example, one can get the IP address of the agent connected
to the proxy from inside a filter ($self->proxy->daemon->peerhost)
- many documentation changes
This version is NOT compatible with the previous ones
regarding the way filters work.
*** MAJOR INTERFACE CHANGES ***
0.09 Fri Aug 15 21:12:17 CEST 2003
- maxserve is now correctly handled
- corrected a bug in the t/20keepalive.t test file that
made the tests fail on some machines
0.08 Thu Mar 13 01:41:42 CET 2003
- cleaned up support for filters
- added support for "buffering" filters
and a new HTTP::Proxy::FilterStack class
- added an anonymiser script (eg/anonymiser.pl)
- the tests won't break if a local proxy is configured
- the interfaces are very likely to change soon
0.07 Tue Feb 18 22:30:43 CET 2003
- the proxy now supports persistent connexions (Yay!)
- and tests to check for it
- and a new timeout accessor
0.06 Mon Feb 17 00:21:37 CET 2003
- better forking system and better reaping of zombies
(thanks to David Landgren and Stéphane Payrard)
Still won't work under Windows, though :-(
- replaced verbose() by logmask(), so as to fine-tune
the logging system
- put some of the test functions in a test module (t::Utils)
0.05 Tue Feb 4 00:47:23 CET 2003
- explicitly refuse CONNECT
- better support for TRACE method
- support the Via: Header (a MUST in RFC 2616)
- filters, but this needs more work
0.04 Sat Nov 30 12:19:22 CET 2002
- accept connection from other hosts
- better ftp support (no test yet)
- basic gopher support (no test yet)
- better HTTP error handling
- use CRLF in HTTP headers
0.03 Fri Nov 29 11:17:36 CET 2002
- url() method gives a url to reach the proxy
- new 'control' attribute defines the control URL
- better subprocess management by preforking child processes
(thanks to Eric Cholet)
- a children handles only one request at a time, for better
performance (this means we only do HTTP/1.0 for now)
- correctly handle the Proxy-Connection and Connection headers
0.02 Thu Oct 24 23:45:08 CEST 2002
- the system now forks to handle several connections
- but needs better test suites
0.01 Tue Oct 1 11:54:07 CEST 2002
- original version