= Mechanize CHANGELOG === 0.9.2 / 2009/03/05 * New Features: * Mechanize#submit and Form#submit take arbitrary headers(thanks penguincoder) * Bug Fixes: * Fixed a bug with bad cookie parsing * Form::RadioButton#click unchecks other buttons (RF #24159) * Fixed problems with Iconv (RF #24190, RF #24192, RF #24043) * POST parameters should be CGI escaped * Made Content-Type match case insensitive (Thanks Kelly Reynolds) * Non-string form parameters work === 0.9.1 2009/02/23 * New Features: * Encoding may be specified for a page: Page#encoding= * Bug Fixes: * m17n fixes. ありがとう konn! * Fixed a problem with base tags. ありがとう Keisuke * HEAD requests do not record in the history * Default encoding to ISO-8859-1 instead of ASCII * Requests with URI instances should not be polluted RF #23472 * Nonce count fixed for digest auth requests. Thanks Adrian Slapa! * Fixed a referer issue with requests using a uri. RF #23472 * WAP content types will now be parsed * Rescued poorly formatted cookies. Thanks Kelley Reynolds! === 0.9.0 * Deprecations * WWW::Mechanize::List is gone! * Mechanize uses Nokogiri as it's HTML parser but you may switch to Hpricot by using WWW::Mechanize.html_parser = Hpricot * Bug Fixes: * Nil check on page when base tag is used #23021 === 0.8.5 * Deprecations * WWW::Mechanize::List will be deprecated in 0.9.0, and warnings have been added to help you upgrade. * Bug Fixes: * Stopped raising EOF exceptions on HEAD requests. ありがとう:HIRAKU Kuroda * Fixed exceptions when a logger is set and file:// requests are made. * Made Mechanize 1.9 compatible * Not setting the port in the host header for SSL sites. * Following refresh headers. Thanks Tim Connor! * Cookie Jar handles cookie domains containing ports, like 'mydomain.com:443' (Thanks Michal Ochman!) * Fixing strange uri escaping problems [#22604] * Making content-type determintation more robust. (thanks Han Holl!) * Dealing with links that are query string only. [#22402] * Nokogiri may be dropped in as a replacement. WWW::Mechanize.html_parser = Nokogiri::HTML * Making sure the correct page is added to the history on meta refresh. [#22708] * Mechanize#get requests no longer send a referer unless they are relative requests. === 0.8.4 * Bug Fixes: * Setting the port number on the host header. * Fixing Authorization headers for picky servers === 0.8.3 * Bug Fixes: * Making sure logger is set during SSL connections. === 0.8.2 * Bug Fixes: * Doh! I was accidentally setting headers twice. === 0.8.1 * Bug Fixes: * Fixed problem with nil pointer when logger is set === 0.8.0 * New Features: * Lifecycle hooks. Mechanize#pre_connect_hooks, Mechanize#post_connect_hooks * file:/// urls are now supported * Added Mechanize::Page#link_with, frame_with for searching for links using +criteria+. * Implementing PUT, DELETE, and HEAD requests * Bug Fixes: * Fixed an infinite loop when content-length and body length don't match. * Only setting headers once * Adding IIS authentication support === 0.7.8 * Bug Fixes: * Fixed bug when receiving a 304 response (HTTPNotModified) on a page not cached in history. * #21428 Default to HTML parser for 'application/xhtml+xml' content-type. * Fixed an issue where redirects were resending posted data === 0.7.7 * New Features: * Page#form_with takes a +criteria+ hash. * Page#form is changed to Page#form_with * Mechanize#get takes custom http headers. Thanks Mike Dalessio! * Form#click_button submits a form defaulting to the current button. * Form#set_fields now takes a hash. Thanks Tobi! * Mechanize#redirection_limit= for setting the max number of redirects. * Bug Fixes: * Added more examples. Thanks Robert Jackson. * #20480 Making sure the Host header is set. * #20672 Making sure cookies with weird semicolons work. * Fixed bug with percent signs in urls. http://d.hatena.ne.jp/kitamomonga/20080410/ruby_mechanize_percent_url_bug * #21132 Not checking for EOF errors on redirect * Fixed a weird gzipping error. * #21233 Smarter multipart boundry. Thanks Todd Willey! * #20097 Supporting meta tag cookies. === 0.7.6 * New Features: * Added support for reading Mozilla cookie jars. Thanks Chris Riddoch! * Moving text, password, hidden, int to default. Thanks Tim Harper! * Mechanize#history_added callback for page loads. Thanks Tobi Reif! * Mechanize#scheme_handlers callbacks for handling unsupported schemes on links. * Bug Fixes: * Ignoring scheme case http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=470642 * Not encoding tildes in uris. Thanks Bruno. [#19380] * Resetting request bodys when retrying form posts. Thanks Bruno. [#19379] * Throwing away keep alive connections on EPIPE and ECONNRESET. * Duplicating request headers when retrying a 401. Thanks Hiroshi Ichikawa. * Simulating an EOF error when a response length is bad. Thanks Tobias Gruetzmacher. http://rubyforge.org/tracker/index.php?func=detail&aid=19178&group_id=1453&atid=5711 * Defaulting option tags to the inner text. http://rubyforge.org/tracker/index.php?func=detail&aid=19976&group_id=1453&atid=5709 * Supporting blank strings for option values. http://rubyforge.org/tracker/index.php?func=detail&aid=19975&group_id=1453&atid=5709 === 0.7.5 * Fixed a bug when fetching files and not pages. Thanks Mat Schaffer! === 0.7.4 * doh! === 0.7.3 * Pages are now yielded to a blocks given to WWW::Mechanize#get * WWW::Mechanize#get now takes hash arguments for uri parameters. * WWW::Mechanize#post takes an IO object as a parameter and posts correctly. * Fixing a strange zlib inflate problem on windows === 0.7.2 * Handling gzipped responses with no Content-Length header === 0.7.1 * Added iPhone to the user agent aliases. [#17572] * Fixed a bug with EOF errors in net/http. [#17570] * Handling 0 length gzipped responses. [#17471] === 0.7.0 * Removed Ruby 1.8.2 support * Changed parser to lazily parse links * Lazily parsing document * Adding verify_callback for SSL requests. Thanks Mike Dalessio! * Fixed a bug with Accept-Language header. Thanks Bill Siggelkow. === 0.6.11 * Detecting single quotes in meta redirects. * Adding pretty inspect for ruby versions > 1.8.4 (Thanks Joel Kociolek) http://rubyforge.org/tracker/index.php?func=detail&aid=13150&group_id=1453&atid=5709 * Fixed bug with file name in multipart posts http://rubyforge.org/tracker/?func=detail&aid=15594&group_id=1453&atid=5709 * Posting forms relative to the originating page. Thanks Mortee. * Added a FAQ http://rubyforge.org/tracker/?func=detail&aid=15772&group_id=1453&atid=5709 === 0.6.10 * Made digest authentication work with POSTs. * Made sure page was HTML before following meta refreshes. http://rubyforge.org/tracker/index.php?func=detail&aid=12260&group_id=1453&atid=5709 * Made sure that URLS with a host and no path would default to '/' for history purposes. http://rubyforge.org/tracker/index.php?func=detail&aid=12368&group_id=1453&atid=5709 * Avoiding memory leaks with transact. Thanks Tobias Gruetzmacher! http://rubyforge.org/tracker/index.php?func=detail&aid=12057&group_id=1453&atid=5711 * Fixing a problem with # signs in the file name. Thanks Tobias Gruetzmacher! http://rubyforge.org/tracker/index.php?func=detail&aid=12510&group_id=1453&atid=5711 * Made sure that blank form values are submitted. http://rubyforge.org/tracker/index.php?func=detail&aid=12505&group_id=1453&atid=5709 * Mechanize now respects the base tag. Thanks Stephan Dale. http://rubyforge.org/tracker/index.php?func=detail&aid=12468&group_id=1453&atid=5709 * Aliasing inspect to pretty_inspect. Thanks Eric Promislow. http://rubyforge.org/pipermail/mechanize-users/2007-July/000157.html === 0.6.9 * Updating UTF-8 support for urls * Adding AREA tags to the links list. http://rubyforge.org/pipermail/mechanize-users/2007-May/000140.html * WWW::Mechanize#follow_meta_refresh will allow you to automatically follow meta refresh tags. [#10032] * Adding x-gzip to accepted content-encoding. Thanks Simon Strandgaard http://rubyforge.org/tracker/index.php?func=detail&aid=11167&group_id=1453&atid=5711 * Added Digest Authentication support. Thanks to Ryan Davis and Eric Hodel, you get a gold star! === 0.6.8 * Keep alive can be shut off now with WWW::Mechanize#keep_alive * Conditional requests can be shut off with WWW::Mechanize#conditional_requests * Monkey patched Net::HTTP#keep_alive? * [#9877] Moved last request time. Thanks Max Stepanov * Added WWW::Mechanize::File#save * Defaulting file name to URI or Content-Disposition * Updating compatability with hpricot * Added more unit tests === 0.6.7 * Fixed a bug with keep-alive requests * [#9549] fixed problem with cookie paths === 0.6.6 * Removing hpricot overrides * Fixed a bug where alt text can be nil. Thanks Yannick! * Unparseable expiration dates in cookies are now treated as session cookies * Caching connections * Requests now default to keep alive * [#9434] Fixed bug where html entities weren't decoded * [#9150] Updated mechanize history to deal with redirects === 0.6.5 * Copying headers to a hash to prevent memory leaks * Speeding up page parsing * Aliased fields to elements * Adding If-Modified-Since header * Added delete_field! to form. Thanks to Sava Chankov * Updated uri escaping to support high order characters. Thanks to Henrik Nyh. * Better handling relative URIs. Thanks to Henrik Nyh * Now handles pipes in URLs http://rubyforge.org/tracker/?func=detail&aid=7140&group_id=1453&atid=5709 * Now escaping html entities in form fields. http://rubyforge.org/tracker/?func=detail&aid=7563&group_id=1453&atid=5709 * Added MSIE 7.0 user agent string === 0.6.4 * Adding the "redirect_ok" method to Mechanize to stop mechanize from following redirects. http://rubyforge.org/tracker/index.php?func=detail&aid=6571&group_id=1453&atid=5712 * Added protected method Mechanize#set_headers so that subclasses can set custom headers. http://rubyforge.org/tracker/?func=detail&aid=7208&group_id=1453&atid=5712 * Aliased Page#referer to Page#page * Fixed a bug when clicking relative urls http://rubyforge.org/pipermail/mechanize-users/2006-November/000035.html * Fixing a bug when bad version or max age is passed to Cookie::parse http://rubyforge.org/pipermail/mechanize-users/2006-November/000033.html * Fixing a bug with response codes. [#6526] * Fixed bug [#6548]. Input type of 'button' was not being added as a button. * Fixed bug [#7139]. REXML parser calls hpricot parser by accident === 0.6.3 * Added keys and values methods to Form * Added has_value? to Form * Added a has_field? method to Form * The add_field! method on Form now creates a field for you on the form. Thanks to Mat Schaffer for the patch. http://rubyforge.org/pipermail/mechanize-users/2006-November/000025.html * Fixed a bug when form actions have html ecoded entities in them. http://rubyforge.org/pipermail/mechanize-users/2006-October/000019.html * Fixed a bug when links or frame sources have html encoded entities in the href or src. * Fixed a bug where '#' symbols are encoded http://rubyforge.org/forum/message.php?msg_id=14747 === 0.6.2 * Added a yield to Page#form so that dealing with forms can be more DSL like. * Added the parsed page to the ResponseCodeError so that the parsed results can be accessed even in the event of an error. http://rubyforge.org/pipermail/mechanize-users/2006-September/000007.html * Updated documentation (Thanks to Paul Smith) === 0.6.1 * Added a method to Form called "submit". Now forms can be submitted by calling a method on the form. * Added a click method to links * Added an REXML pluggable parser for backwards compatability. To use it, just do this: agent.pluggable_parser.html = WWW::Mechanize::REXMLPage * Fixed a bug with referrers by adding a page attribute to forms and links. * Fixed a bug where domain names were case sensitive. http://tenderlovemaking.com/2006/09/04/road-to-ruby-mechanize-060/#comment-53 * Fixed a bug with URI escaped links. http://rubyforge.org/pipermail/mechanize-users/2006-September/000002.html * Fixed a bug when options in select lists don't have a value. Thanks Dan Higham [#5837] Code in lib/mechanize/form_elements.rb is incorrect. * Fixed a bug with loading text in to links. http://rubyforge.org/pipermail/mechanize-users/2006-September/000000.html === 0.6.0 * Changed main parser to use hpricot * Made WWW::Mechanize::Page class searchable like hpricot * Updated WWW::Mechanize#click to support hpricot links like this: @agent.click (page/"a").first * Clicking a Frame is now possible: @agent.click (page/"frame").first * Removed deprecated attr_finder * Removed REXML helper methods since the main parser is now hpricot * Overhauled cookie parser to use WEBrick::Cookie === 0.5.4 * Added WWW::Mechanize#trasact for saving history state between in a transaction. See the EXAMPLES file. Thanks Johan Kiviniemi. * Added support for gzip compressed pages * Forms can now be accessed like a hash. For example, to set the value of an input field named 'name' to "Aaron", you can do this: form['name'] = "Aaron" Or to get the value of a field named 'name', do this: puts form['name'] * File uploads will now read the file specified in FileUpload#file_name * FileUpload can use an IO object in FileUpload#file_data * Fixed a bug with saving files on windows * Fixed a bug with the filename being set in forms === 0.5.3 * Mechanize#click will now act on the first element of an array. So if an array of links is passed to WWW::Mechanize#click, the first link is clicked. That means the syntax for clicking links is shortened and still supports selecting a link. The following are equivalent: agent.click page.links.first agent.click page.links * Fixed a bug with spaces in href's and get's * Added a tick, untick, and click method to radio buttons so that radiobuttons can be "clicked" * Added a tick, untick, and click method to check boxes so that checkboxes can be "clicked" * Options on Select lists can now be "tick"ed, and "untick"ed. * Fixed a potential bug conflicting with rails. Thanks Eric Kolve * Updated log4r support for a speed increase. Thanks Yinon Bentor * Added inspect methods and pretty printing === 0.5.2 * Fixed a bug with input names that are nil * Added a warning when using attr_finder because attr_finder will be deprecated in 0.6.0 in favor of method calls. So this syntax: @agent.links(:text => 'foo') should be changed to this: @agent.links.text('foo') * Added support for selecting multiple options in select tags that support multiple options. See WWW::Mechanize::MultiSelectList. * New select list methods have been added, select_all, select_none. * Options for select lists can now be "clicked" which toggles their selection, they can be "selected" and "unselected". See WWW::Mechanize::Option * Added a method to set multiple fields at the same time, WWW::Mechanize::Form#set_fields. Which can be used like so: form.set_fields( :foo => 'bar', :name => 'Aaron' ) === 0.5.1 * Fixed bug with file uploads * Added performance tweaks to the cookie class === 0.5.0 * Added pluggable parsers. (Thanks to Eric Kolve for the idea) * Changed namespace so all classes are under WWW::Mechanize. * Updating Forms so that fields can be used as accessors (Thanks Gregory Brown) * Added WWW::Mechanize::File as default object used for unknown content types. * Added 'save_as' method to Mechanize::File, so any page can be saved. * Adding 'save_as' and 'load' to CookieJar so that cookies can be saved between sessions. * Added WWW::Mechanize::FileSaver pluggable parser to automatically save files. * Added WWW::Mechanize::Page#title for page titles * Added OpenSSL certificate support (Thanks Mike Dalessio) * Removed support for body filters in favor of pluggable parsers. * Fixed cookie bug adding a '/' when the url is missing one (Thanks Nick Dainty) === 0.4.7 * Fixed bug with no action in forms. Thanks to Adam Wiggins * Setting a default user-agent string * Added house cleaning to the cookie jar so expired cookies don't stick around. * Added new method WWW::Form#field to find the first field with a given name. (thanks to Gregory Brown) * Added WWW::Mechanize#get_file for fetching non text/html files === 0.4.6 * Added support for proxies * Added a uri field to WWW::Link * Added a error class WWW::Mechanize::ContentTypeError * Added image alt text to link text * Added an visited? method to WWW::Mechanize * Added Array#value= which will set the first value to the argument. That allows syntax as such: form.fields.name('q').value = 'xyz' Before it was like this: form.fields.name('q').first.value = 'xyz' === 0.4.5 * Added support for multiple values of the same name * Updated build_query_string to take an array of arrays (Thanks Michal Janeczek) * Added WWW::Mechanize#body_filter= so that response bodies can be preprocessed * Added WWW::Page#body_filter= so that response bodies can be preprocessed * Added support for more date formats in the cookie parser * Fixed a bug with empty select lists * Fixing a problem with cookies not handling no spaces after semicolons === 0.4.4 * Fixed error in method signature, basic_authetication is now basic_auth * Fixed bug with encoding names in file uploads (Big thanks to Alex Young) * Added options to the select list === 0.4.3 * Added syntactic sugar for finding things * Fixed bug with HttpOnly option in cookies * Fixed a bug with cookie date parsing * Defaulted dropdown lists to the first element * Added unit tests === 0.4.2 * Added support for iframes * Made mechanize dependant on ruby-web rather than narf * Added unit tests * Fixed a bunch of warnings === 0.4.1 * Added support for file uploading * Added support for frames (Thanks Gabriel[mailto:leerbag@googlemail.com]) * Added more unit tests * Fixed some bugs === 0.4.0 * Added more unit tests * Added a cookie jar with better cookie support, included expiration of cookies and general cookie security. * Updated mechanize to use built in net/http if ruby version is new enough. * Added support for meta refresh tags * Defaulted form actions to 'GET' * Fixed various bugs * Added more unit tests * Added a response code exception * Thanks to Brian Ellin (brianellin@gmail.com) for: Added support for CA files, and support for 301 response codes