diff --git a/lib/target.rb b/lib/target.rb index 6e1a7ab..6455b3f 100644 --- a/lib/target.rb +++ b/lib/target.rb @@ -356,6 +356,21 @@ def open_url(options) end @headers['set-cookie'] = res.get_fields('set-cookie').join("\n") unless @headers['set-cookie'].nil? + # update cookies + if $UPDATE_COOKIES and not @headers['set-cookie'].nil? + res.get_fields('set-cookie').each do |raw_cookie| + cookie = raw_cookie.split(';')[0] + cookie_name = cookie.split('=')[0] + cookie_pattern = Regexp.new('%s=.*?(?=$|;)' % cookie_name) + if not $CUSTOM_HEADERS.has_key?('Cookie') + $CUSTOM_HEADERS['Cookie'] = cookie + elsif $CUSTOM_HEADERS['Cookie'].match(cookie_pattern) + $CUSTOM_HEADERS['Cookie'].sub!(cookie_pattern, cookie) + else + $CUSTOM_HEADERS['Cookie'] += '; %s' % cookie + end + end + end @status = res.code.to_i puts @uri.to_s + " [#{status}]" if $verbose > 1 diff --git a/lib/whatweb.rb b/lib/whatweb.rb index 1e2631d..7f64791 100644 --- a/lib/whatweb.rb +++ b/lib/whatweb.rb @@ -67,6 +67,7 @@ $USER_AGENT = "WhatWeb/#{WhatWeb::VERSION}" $AGGRESSION = 1 $FOLLOW_REDIRECT = 'always' +$UPDATE_COOKIES = false $USE_PROXY = false $PROXY_HOST = nil $PROXY_PORT = 8080 diff --git a/lib/whatweb/version.rb b/lib/whatweb/version.rb index ad7a74c..e1e4092 100644 --- a/lib/whatweb/version.rb +++ b/lib/whatweb/version.rb @@ -15,5 +15,5 @@ # You should have received a copy of the GNU General Public License # along with WhatWeb. If not, see . module WhatWeb - VERSION = '0.5.5.14'.freeze + VERSION = '0.5.5.15'.freeze end diff --git a/whatweb.rb b/whatweb.rb index 789986e..32f7665 100644 --- a/whatweb.rb +++ b/whatweb.rb @@ -92,6 +92,7 @@ def usage_full --user, -u=\tHTTP basic authentication. --cookie, -c=COOKIES\t\tUse cookies, e.g. 'name=value; name2=value2'. --cookie-jar=FILE\t\tRead cookies from a file. + --update-cookies\t\tUpdate cookies according to responses. PROXY: --proxy, -P\t\t\t Set proxy hostname and port. @@ -347,6 +348,7 @@ def error(s) ['--header', '-H', GetoptLong::REQUIRED_ARGUMENT], ['--cookie', '-c', GetoptLong::REQUIRED_ARGUMENT], ['--cookie-jar', GetoptLong::REQUIRED_ARGUMENT], + ['--update-cookies', GetoptLong::NO_ARGUMENT], ['--user', '-u', GetoptLong::REQUIRED_ARGUMENT], ['--wait', GetoptLong::REQUIRED_ARGUMENT], ['--debug', GetoptLong::NO_ARGUMENT], @@ -530,6 +532,8 @@ def error(s) rescue raise("Could not read cookies from #{arg}.") end + when '--update-cookies' + $UPDATE_COOKIES = true when '-u', '--user' unless arg.include?(':') raise("Incorrect credentials format.")