Skip to content

Instantly share code, notes, and snippets.

@kjvarga
Created January 26, 2010 16:27
Show Gist options
  • Save kjvarga/286970 to your computer and use it in GitHub Desktop.
Save kjvarga/286970 to your computer and use it in GitHub Desktop.
require 'net/http'
require 'uri'
#
# Call with one of do_post, do_get or do_put.
# Headers are automatically added to your options, so don't include them in your call.
# The URL must be provided as a URI object so that it can be found in the list of arguments.
#
# e.g. puts SimpleHTTP.do_get(URI.parse('http://whatsmyuseragent.com/'))
# puts "successful request? #{FakeUserAgent.success?}"
#
class SimpleHTTP
cattr_accessor :open_timeout
def self.do_request(method, url, data=nil)
uri = url.is_a?(URI) ? url : URI.parse(url)
uri.instance_eval { def empty?; false; end; }
server = Net::HTTP.new(uri.host, uri.port)
server.set_debug_output(ActiveRecord::Base.logger.instance_variable_get(:@log)) unless ENV['RAILS_ENV'] == 'production' rescue nil
server.open_timeout = self.open_timeout || 15
args = [method, uri.path]
args << build_query(uri, data) unless data.nil?
args << headers
@response = server.send(*args)
end
def self.headers
{ 'User-Agent' => FAKE_USER_AGENTS.rand,
'Referer' => FAKE_REFERRERS.rand }
end
def self.do_post(url, data=nil)
self.do_request('request_post', url, data)
end
def self.do_get(url)
self.do_request('request_get', url)
end
# def self.do_put(url, data={})
# self.send(:do_request, 'send_request', 'PUT', url, data)
# end
def self.success?
return @response && @response.code_type.superclass == Net::HTTPSuccess
end
protected
def self.build_query(uri, data)
if data.is_a?(Hash)
data = data.collect { |k,v| [k,CGI.escape(v.to_s)].join('=') }.join('&')
end
uri.query.nil? ? data : (uri.query + '&' + data)
end
end
FAKE_REFERRERS = [
'http://www.richmondgreyhounds.com.au/links.htm',
'google.com',
''
]
FAKE_USER_AGENTS = [
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Maxthon/3.0 Safari/530.6',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MathPlayer 2.10d; .NET CLR 3.5.30729; .NET CLR 2.0.50727',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NE',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729)',
'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE51-1/300.34.56; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/',
'Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1/21.0.025; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3',
'Mozilla/4.0 (compatible; MSIE 6.0; AOL 9.5; AOLBuild 4337.29; Windows NT 5.1)',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.3) Gecko/20090912 Firefox/3.5.3',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.3) Gecko/20090912 Firefox/3.5.3 (pigfoot)',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.3) Gecko/20090912 Firefox/3.5.3 (pigfoot)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Maxthon/3.0 Safari/530.6',
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20090909 Fedora/3.5.3-1.fc11 Firefox/3.5.3',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Maxthon/3.0 Safari/530.6',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Maxthon/3.0 Safari/530.6',
'Mozilla/5.0 (compatible; Konqueror/4.1; Linux 2.6.27.29-0.1-pae; X11; i686; ru, en-US, en) KHTML/4.1.3 (like Gecko) SUSE',
'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8',
'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8',
'Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8',
'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2a1pre) Gecko/20090428 Firefox/3.6a1pre',
'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2a1pre) Gecko/20090405 Firefox/3.6a1pre',
'Mozilla/5.0 (X11; U; Linux i686; ru-RU; rv:1.9.2a1pre) Gecko/20090405 Ubuntu/9.04 (jaunty)',
'Mozilla/5.0 (Windows; Windows NT 5.1; es-ES; rv:1.9.2a1pre) Gecko/20090402 Firefox/3.6a1pre',
'Mozilla/5.0 (Windows; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090402 Firefox/3.6a1pre',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2a1pre) Gecko/20090402 Firefox/3.6a1pre (.NET CLR 3.5.30729)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b5pre) Gecko/20090517 Firefox/3.5b4pre (.NET CLR 3.5.30729)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b4pre) Gecko/20090409 Firefox/3.5b4pre',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b4pre) Gecko/20090401 Firefox/3.5b4pre',
'Mozilla/5.0 (X11; U; Linux i686; nl-NL; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 GTB5 (.NET CLR 3.5.30729)',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 GTB5',
'Mozilla/5.0 (X11; U; Linux x86_64; es-AR; rv:1.9.0.2) Gecko/2008091920 Firefox/3.0.2 Flock/2.0b3',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.2) Gecko/2008092122 Firefox/3.0.2',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.2) Gecko/2008083108 Firefox/3.0.2 Flock/2.0b3',
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071523 Firefox/3.0.1 Flock/2.0b2',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008071523 Firefox/3.0.1 Flock/2.0b2',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9) Gecko/2008061302 Firefox/3.0 Flock/2.0b1',
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9pre) Gecko/2008051917 Firefox/3.0pre Flock/2.0a1pre',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008121620 Firefox/3.0.5 Flock/2.0.3',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.0.5) Gecko/2008121716 Firefox/3.0.5 Flock/2.0.3',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.4) Gecko/2008112016 Firefox/3.0.4 Flock/2.0.2',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008112016 Firefox/3.0.4 Flock/2.0.2',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.4) Gecko/2008111323 Firefox/3.0.4 Flock/2.0.2',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.0.4) Gecko/2008111323 Firefox/3.0.4 Flock/2.0.2',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/4.0dp1 Safari/526.8',
'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; tr) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2',
'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2',
'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; de) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2',
'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081212 Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/4.0dp1 Safari/526.8',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-gb) AppleWebKit/528.10+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-gb) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9',
'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/532.0+ (KHTML, like Gecko) Version/4.0.3 Safari/531.9.2009',
'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/532.0+ (KHTML, like Gecko) Version/4.0.3 Safari/531.9',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fi-fi) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532+ (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl-PL) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 5.2; de-DE) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1',
'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_7; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19',
'Opera/9.70 (Linux ppc64 ; U; en) Presto/2.2.1',
'Opera/9.70 (Linux i686 ; U; zh-cn) Presto/2.2.0',
'Opera/9.70 (Linux i686 ; U; en-us) Presto/2.2.0',
'Opera/9.70 (Linux i686 ; U; en) Presto/2.2.1',
'Opera/9.70 (Linux i686 ; U; en) Presto/2.2.0',
'Opera/9.70 (Linux i686 ; U; ; en) Presto/2.2.1',
'Mozilla/5.0 (Linux i686 ; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.70',
'Mozilla/4.0 (compatible; MSIE 6.0; Linux i686 ; en) Opera 9.70',
'Opera 9.7 (Windows NT 5.2; U; en)',
'Opera/9.64(Windows NT 5.1; U; en) Presto/2.1.1',
'Opera/9.64 (X11; Linux x86_64; U; pl) Presto/2.1.1',
'Opera/9.64 (X11; Linux x86_64; U; hr) Presto/2.1.1',
'Opera/9.64 (X11; Linux x86_64; U; en-GB) Presto/2.1.1',
'Opera/9.64 (X11; Linux x86_64; U; en) Presto/2.1.1',
'Opera/9.64 (X11; Linux x86_64; U; de) Presto/2.1.1',
'Opera/9.64 (X11; Linux x86_64; U; cs) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; tr) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; sv) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; pl) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; nb) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; Linux Mint; it) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; de) Presto/2.1.1',
'Opera/9.64 (X11; Linux i686; U; da) Presto/2.1.1',
'Opera/9.64 (Windows NT 6.1; U; de) Presto/2.1.1',
'Opera/9.64 (Windows NT 6.0; U; zh-cn) Presto/2.1.1',
'Opera/9.64 (Windows NT 6.0; U; pl) Presto/2.1.1',
'Opera/9.64 (Windows NT 6.0; U; it) Presto/2.1.1',
'Opera/9.63 (X11; Linux x86_64; U; ru) Presto/2.1.1',
'Opera/9.63 (X11; Linux x86_64; U; cs) Presto/2.1.1',
'Opera/9.63 (X11; Linux i686; U; ru) Presto/2.1.1',
'Opera/9.63 (X11; Linux i686; U; ru)',
'Opera/9.63 (X11; Linux i686; U; nb) Presto/2.1.1',
'Opera/9.63 (X11; Linux i686; U; en)',
'Opera/9.63 (X11; Linux i686; U; de) Presto/2.1.1',
'Opera/9.63 (X11; Linux i686)',
'Opera/9.63 (X11; FreeBSD 7.1-RELEASE i386; U; en) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.1; U; hu) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.1; U; en) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.1; U; de) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.0; U; pl) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.0; U; nb) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.0; U; fr) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.0; U; en) Presto/2.1.1',
'Opera/9.63 (Windows NT 6.0; U; cs) Presto/2.1.1',
'Opera/9.63 (Windows NT 5.2; U; en) Presto/2.1.1',
'Opera/9.63 (Windows NT 5.2; U; de) Presto/2.1.1',
'Opera/9.63 (Windows NT 5.1; U; pt-BR) Presto/2.1.1'
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment