blob: fa0be3cf7bdad9f0bf0c2cdbe2e4cc83d59825b3 [file] [log] [blame]
Brian Silverman8fa2aad2017-06-10 16:45:30 -07001require 'net/http'
2begin
3 require "sha1"
4rescue LoadError
5 require "digest/sha1"
6end
7
8require 'rubygems'
9require 'nokogiri'
10
11def retrieve_url url
12 cache_file = '.url_cache/' + Digest::SHA1.hexdigest(url)
13 if File.exists? cache_file
14 server_response = YAML.load_file(cache_file)
15 else
16 uri = URI.parse(url)
17 resp = Net::HTTP.start(uri.hostname, uri.port) do |http|
18 path = uri.path
19 if uri.query
20 path += '?'
21 path += uri.query
22 end
23 if uri.host == 'www.digikey.com'
24 req = Net::HTTP::Post.new(path)
25 req.set_form_data(
26 'TS01ddcca6_id' => '3',
27 'TS01ddcca6_cr' => 'ce1fcbf6f531dc4315cd98214a898f01:jnlm:8Ij6i51F:267420643',
28 'TS01ddcca6_76' => '0',
29 'TS01ddcca6_86' => '0',
30 'TS01ddcca6_md' => '1',
31 'TS01ddcca6_rf' => '0',
32 'TS01ddcca6_ct' => '0',
33 'TS01ddcca6_pd' => '0',
34 )
35 req['Referrer'] = 'http://www.digikey.com/product-search/en?keywords=CL21C271JBANNNC'
36 else
37 req = Net::HTTP::Get.new(path)
38 end
39 http.request(req)
40 end
41 if resp.code == '301' || resp.code == '302'
42 server_response = retrieve_url(uri.scheme + '://' + uri.host + resp['location'])
43 else
44 resp.value
45 server_response = resp.body
46 end
47 File.open(cache_file, 'w') do |f|
48 YAML.dump server_response, f
49 end
50 end
51
52 server_response
53end