phantom_client 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,28 @@
1
+ == Phantom Client
2
+ Phantom Client is a clientlibrary to Phantom Proxy
3
+ (see https://github.com/experteer/phantom_proxy).
4
+ It's a thin layer around Net::HTTP to fetch a page
5
+ through the Phantom Proxy with specific options.
6
+
7
+ == Installation
8
+ gem build phantom_client.gemspec
9
+ gem install phantom_client-*.gem
10
+
11
+ == Usage
12
+
13
+ Usage example:
14
+
15
+ require 'phantom_client'
16
+
17
+ client = PhantomJSProxy::PhantomJSClient.new([{:addr => "127.0.0.1", :port => 5000}])
18
+ dom = client.get("http://foo.de/", {:imageOnly => false, :withIframes => true})
19
+
20
+ or in the bash
21
+
22
+ phantom_client http://foo.de/ [proxy_ip:port []]
23
+
24
+ == TODO
25
+ * nicer API
26
+ * gemify
27
+ * namespace cleanup
28
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+
3
+ task :build do
4
+ sh "gem build phclient.gemspec"
5
+ end
6
+
7
+ task :install do
8
+ sh "gem install phantom_client-*.gem"
9
+ end
10
+
11
+ task :uninstall do
12
+ sh "gem uninstall phantom_client"
13
+ end
14
+
15
+ task :clean do
16
+ sh "rm phantom_client-*.gem"
17
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'phantom_client'
5
+
6
+ url = nil
7
+ proxy_list = []
8
+
9
+ ARGV.each{ |arg|
10
+ if url == nil
11
+ url = arg
12
+ else
13
+ newE = {}
14
+ newE[:addr] = arg.split(':')[0]
15
+ newE[:port] = arg.split(':')[1]
16
+ proxy_list.push newE
17
+ end
18
+ }
19
+
20
+ if url == nil
21
+ return
22
+ end
23
+
24
+ client = PhantomJSProxy::PhantomJSClient.new(proxy_list)
25
+ puts client.get(url, {:imageOnly => false, :withIframes => true})
@@ -0,0 +1,71 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ module PhantomJSProxy
5
+ class PhantomJSClient
6
+
7
+ attr_accessor :proxy_addr
8
+ attr_accessor :proxy_port
9
+ attr_accessor :proxy_list
10
+ attr_accessor :connection
11
+
12
+ def initialize(addr_list=[], con = PhantomJSClientConnection.new)
13
+ @proxy_list = addr_list
14
+ @connection = con
15
+ end
16
+
17
+ def get(addr, options=nil)
18
+ url = URI.parse(addr)
19
+ req = Net::HTTP::Get.new(url.path)
20
+ req['User-Agent'] = "PhantomJSClient"
21
+ if /\?/.match(addr)
22
+ req.body = addr.split('?')[1]
23
+ end
24
+
25
+ if options && options['imageOnly']
26
+ req['Get-Page-As-Image'] = options['imageOnly']
27
+ puts "Do image only"
28
+ end
29
+
30
+ if options && options['withIframes']
31
+ req['HTTP_GET_PAGE_WITH_IFRAMES'] = options['withIframes']
32
+ puts "Do fetch iframes"
33
+ end
34
+ #::Proxy(@proxy_addr, @proxy_port)
35
+
36
+ #element = get_proxy()
37
+ #begin
38
+ # @connection.do_request(element, url, req)
39
+ #rescue
40
+ # return "Could not connect to proxy"
41
+ #end
42
+ do_get(url, req, 10)
43
+ end
44
+
45
+ def do_get(url, req, count)
46
+ element = get_proxy()
47
+ if element[:addr] && element[:port]
48
+ puts "try: "+element[:addr]+", "+element[:port]
49
+ else
50
+ puts "DUMMY TRY"
51
+ end
52
+
53
+ begin
54
+ @connection.do_request(element, url, req)
55
+ rescue
56
+ if count == 0
57
+ return "Could not connect to proxy"
58
+ end
59
+ do_get(url, req, count-1)
60
+ end
61
+ end
62
+
63
+ def get_proxy
64
+ element_n = rand(@proxy_list.count)
65
+ if @proxy_list.count > 0
66
+ return @proxy_list[element_n]
67
+ end
68
+ return {:addr => nil, :port => nil}
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,13 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ module PhantomJSProxy
5
+ class PhantomJSClientConnection
6
+ def do_request(proxy, url, req)
7
+ res = Net::HTTP::Proxy(proxy[:addr], proxy[:port]).start(url.host, url.port) {|http|
8
+ http.request(req)
9
+ }
10
+ return res.body
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+
3
+ require File.expand_path(File.dirname(__FILE__))+'/phantom_client/phantom_client.rb'
4
+ require File.expand_path(File.dirname(__FILE__))+'/phantom_client/phantom_client_connection.rb'
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: phantom_client
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Daniel Sudmann
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-03-23 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: This is a phantomjs Proxy client
23
+ email: suddani@googlemail.com
24
+ executables:
25
+ - phantom_client
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/phantom_client/phantom_client_connection.rb
32
+ - lib/phantom_client/phantom_client.rb
33
+ - lib/phantom_client.rb
34
+ - bin/phantom_client
35
+ - README.rdoc
36
+ - Rakefile
37
+ has_rdoc: true
38
+ homepage: http://experteer.com
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ hash: 3
52
+ segments:
53
+ - 0
54
+ version: "0"
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ requirements: []
65
+
66
+ rubyforge_project:
67
+ rubygems_version: 1.5.2
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: This is a phantomjs Proxy client
71
+ test_files: []
72
+