class Pdfcrowd::ConnectionHelper
Public Class Methods
new(user_name, api_key)
click to toggle source
# File lib/pdfcrowd.rb, line 536 def initialize(user_name, api_key) @user_name = user_name @api_key = api_key reset_response_data() setProxy(nil, nil, nil, nil) setUseHttp(false) setUserAgent('pdfcrowd_ruby_client/5.2.0 (https://pdfcrowd.com)') @retry_count = 1 @converter_version = '20.10' end
Private Class Methods
add_file_field(name, file_name, data, body)
click to toggle source
# File lib/pdfcrowd.rb, line 624 def self.add_file_field(name, file_name, data, body) body << '--' + MULTIPART_BOUNDARY body << 'Content-Disposition: form-data; name="%s"; filename="%s"' % [name, file_name] body << 'Content-Type: application/octet-stream' body << '' body << data.force_encoding('UTF-8') end
encode_multipart_post_data(fields, files, raw_data)
click to toggle source
# File lib/pdfcrowd.rb, line 632 def self.encode_multipart_post_data(fields, files, raw_data) body = [] for field, value in fields body << '--' + MULTIPART_BOUNDARY << 'Content-Disposition: form-data; name="%s"' % field << '' << value.to_s if value end for name, file_name in files File.open(file_name, 'rb') do |f| ConnectionHelper.add_file_field(name, file_name, f.read, body) end end for name, data in raw_data ConnectionHelper.add_file_field(name, name, data, body) end # finalize body << '--' + MULTIPART_BOUNDARY + '--' body << '' body.join("\r\n") end
Public Instance Methods
getConsumedCreditCount()
click to toggle source
# File lib/pdfcrowd.rb, line 588 def getConsumedCreditCount() @consumed_credits end
getConverterVersion()
click to toggle source
# File lib/pdfcrowd.rb, line 604 def getConverterVersion() @converter_version end
getDebugLogUrl()
click to toggle source
# File lib/pdfcrowd.rb, line 580 def getDebugLogUrl() @debug_log_url end
getJobId()
click to toggle source
# File lib/pdfcrowd.rb, line 592 def getJobId() @job_id end
getOutputSize()
click to toggle source
# File lib/pdfcrowd.rb, line 600 def getOutputSize() @output_size end
getPageCount()
click to toggle source
# File lib/pdfcrowd.rb, line 596 def getPageCount() @page_count end
getRemainingCreditCount()
click to toggle source
# File lib/pdfcrowd.rb, line 584 def getRemainingCreditCount() @credits end
post(fields, files, raw_data, out_stream = nil)
click to toggle source
# File lib/pdfcrowd.rb, line 550 def post(fields, files, raw_data, out_stream = nil) request = create_request() request.body = ConnectionHelper.encode_multipart_post_data(fields, files, raw_data) request.content_type = 'multipart/form-data; boundary=' + MULTIPART_BOUNDARY do_post(request, out_stream) end
setConverterVersion(converter_version)
click to toggle source
# File lib/pdfcrowd.rb, line 569 def setConverterVersion(converter_version) @converter_version = converter_version end
setProxy(host, port, user_name, password)
click to toggle source
# File lib/pdfcrowd.rb, line 573 def setProxy(host, port, user_name, password) @proxy_host = host @proxy_port = port @proxy_user_name = user_name @proxy_password = password end
setRetryCount(retry_count)
click to toggle source
# File lib/pdfcrowd.rb, line 565 def setRetryCount(retry_count) @retry_count = retry_count end
setUseHttp(use_http)
click to toggle source
# File lib/pdfcrowd.rb, line 557 def setUseHttp(use_http) @use_http = use_http end
setUserAgent(user_agent)
click to toggle source
# File lib/pdfcrowd.rb, line 561 def setUserAgent(user_agent) @user_agent = user_agent end
Private Instance Methods
create_http_obj()
click to toggle source
# File lib/pdfcrowd.rb, line 651 def create_http_obj() if !@use_http require 'net/https' #apt-get install libopenssl-ruby http = Net::HTTP.new(HOST, 443) http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless HOST == 'api.pdfcrowd.com' http.use_ssl = true elsif @proxy_host http = Net::HTTP.new(HOST, 80, @proxy_host, @proxy_port, @proxy_user_name, @proxy_password) else http = Net::HTTP.new(HOST, 80) end return http end
create_request()
click to toggle source
# File lib/pdfcrowd.rb, line 620 def create_request() Net::HTTP::Post.new('/convert/%s/' % @converter_version) end
do_post(request, out_stream)
click to toggle source
sends a POST to the API
# File lib/pdfcrowd.rb, line 667 def do_post(request, out_stream) raise Error.new("HTTPS over a proxy is not supported.") if !@use_http and @proxy_host reset_response_data() request.basic_auth(@user_name, @api_key) request.add_field('User-Agent', @user_agent) while true begin return exec_request(request, out_stream) rescue Error => err if err.getCode() == '502' and @retry_count > @retry @retry += 1 sleep(@retry * 0.1) else raise end end end end
exec_request(request, out_stream)
click to toggle source
# File lib/pdfcrowd.rb, line 689 def exec_request(request, out_stream) begin http = create_http_obj() begin http.start {|conn| conn.read_timeout = 300 conn.request(request) {|response| @debug_log_url = response["X-Pdfcrowd-Debug-Log"] || '' @credits = (response["X-Pdfcrowd-Remaining-Credits"] || 999999).to_i @consumed_credits = (response["X-Pdfcrowd-Consumed-Credits"] || 0).to_i @job_id = response["X-Pdfcrowd-Job-Id"] || '' @page_count = (response["X-Pdfcrowd-Pages"] || 0).to_i @output_size = (response["X-Pdfcrowd-Output-Size"] || 0).to_i raise Error.new('test 502', '502') \ if ENV["PDFCROWD_UNIT_TEST_MODE"] and @retry_count > @retry case response when Net::HTTPSuccess if out_stream response.read_body do |chunk| out_stream.write(chunk) end else return response.body end else raise Error.new(response.body, response.code) end } } rescue SystemCallError => why raise Error.new("#{why}\n") rescue Timeout::Error => why raise Error.new("Operation timed out\n") rescue OpenSSL::SSL::SSLError => why raise Error.new("There was a problem connecting to Pdfcrowd servers over HTTPS:\n#{why}" + "\nYou can still use the API over HTTP, you just need to add the following line right after Pdfcrowd client initialization:\nself.setUseHttp(true)", 481) end end end
reset_response_data()
click to toggle source
# File lib/pdfcrowd.rb, line 610 def reset_response_data() @debug_log_url = nil @credits = 999999 @consumed_credits = 0 @job_id = '' @page_count = 0 @output_size = 0 @retry = 0 end