Bugs as of v1.8: - Forms parsing is a bit wonky; it is fixed in libwhisker2. - Cookie support does not yet account for expiration via Expires value. - There are no nonblocking connects on Windows (I'm looking at using the code contained in LWP::Parallel::UserAgent.pm, but I need to figure out how to get the socket back into blocking mode). - Various perl warnings when running under -w. If you send me a copy of the warnings (warning and line number reported), I can fix them. Since warnings are generated at runtime, it's hard to traverse every possible code path and find the warnings. - The internal session cache can grow quite big if you scan thousands of hosts in a row without calling LW::http_reset() or exiting. In order to clear out any left over session information (when you're all done with a host), be sure to call LW::http_reset(). - the 'save_cookies' crawl config option is currently unimplemented/ ignored. - Careful on trying to unset/remove various {whisker} request values. If it's not defined by default, then you should delete the key, rather than setting it to 0, since some libwhisker functions only check to see if a key is defined (it doesn't actually look at the value). - This isn't really a bug, but moreso a gotcha that can affect some programs. By default, libwhisker has {ignore_duplicate_headers}=1, which tells libwhisker to only save one value per header. For example, if the server sends two 'Server' headers, then only the second one will be saved in the hash (because it overwrites the value of the first one). This can be problematic with cookies, since it's not uncommon for a server to send multiple 'Set-Cookie' headers in a response. The end result is, by default, libwhisker only sees one of those cookies. You can change this by setting {ignore_duplicate_headers}=0; however, if you do that, then your code needs to check any header entry to make sure it's not an anonymous array of multiple values. For example: # http_do_request() output is saved into %RESPONSE hash if(defined $RESPONSE{'Set-Cookie'}){ # we have a cookie if( ref($REPSONSE{'Set-Cookie'}){ # multiple cookies foreach $cookie (@{$RESPONSE{'Set-Cookie'}}){ # do something with each cookie } } else { # do something with $RESPONSE{'Set-Cookie'} } } As you can see, that requires your programs to be a lot more complex, and thus that's why libwhisker helps you skip all that complexity by default. Keep in mind that *any* header can have multiple values, so if you turn ignore_duplicate_headers off, you'll need to do the above for *every* header you check/use.