class ProxyCrawl::API

Constants

INVALID_TOKEN
INVALID_URL

Attributes

body[R]
original_status[R]
pc_status[R]
status_code[R]
storage_url[R]
token[R]
url[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/proxycrawl/api.rb, line 14
def initialize(options = {})
  raise INVALID_TOKEN if options[:token].nil?

  @token = options[:token]
end

Public Instance Methods

get(url, options = {}) click to toggle source
# File lib/proxycrawl/api.rb, line 20
def get(url, options = {})
  raise INVALID_URL if url.empty?

  uri = prepare_uri(url, options)

  response = Net::HTTP.get_response(uri)

  prepare_response(response, options[:format])

  self
end
post(url, data, options = {}) click to toggle source
# File lib/proxycrawl/api.rb, line 32
def post(url, data, options = {})
  raise INVALID_URL if url.empty?

  uri = prepare_uri(url, options)

  http = Net::HTTP.new(uri.host, uri.port)

  http.use_ssl = true

  content_type = options[:post_content_type].to_s.include?('json') ? { 'Content-Type': 'text/json' } : nil

  request = Net::HTTP::Post.new(uri.request_uri, content_type)

  if options[:post_content_type].to_s.include?('json')
    request.body = data.to_json
  else
    request.set_form_data(data)
  end

  response = http.request(request)

  prepare_response(response, options[:format])

  self
end

Private Instance Methods

base_url() click to toggle source
# File lib/proxycrawl/api.rb, line 60
def base_url
  'https://api.proxycrawl.com'
end
prepare_response(response, format) click to toggle source
# File lib/proxycrawl/api.rb, line 71
def prepare_response(response, format)
  res = format == 'json' || base_url.include?('/scraper') ? JSON.parse(response.body) : response

  @original_status = res['original_status'].to_i
  @pc_status = res['pc_status'].to_i
  @url = res['url']
  @storage_url = res['storage_url']
  @status_code = response.code.to_i
  @body = response.body
end
prepare_uri(url, options) click to toggle source
# File lib/proxycrawl/api.rb, line 64
def prepare_uri(url, options)
  uri = URI(base_url)
  uri.query = URI.encode_www_form({ token: @token, url: url }.merge(options))

  uri
end