Sha256: dd0d8c7fa8d980210f4e0df3caeea349284d5e652b5f4f5ecd4926db91ca5adf

Contents?: true

Size: 1.75 KB

Versions: 4

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

require 'net/http'

module Tcat
  class HttpClient
    DEFAULT_HEADERS = {
      'User-Agent' => 'BlackCat/2.49 (iPhone; iOS 17.6.1; Scale/3.00)',
      'Accept-Language' => 'zh-Hant-TW;q=1, en-TW;q=0.9',
      'Cookie' => 'citrix_ns_id=AAE7go4rZDusCRcEAAAAADuVBLGLdqo1FolMO02r_jOEnjNmr4u9sIYwtllmmfsOOw==KJArZA==AQJLxyeLYOXPo3Uzfh_rWrr_NcU=; ASP.NET_SessionId=p4v1z4nijrynbortgf4iqml4'
    }.freeze

    API_ENDPOINT = 'https://www.t-cat.com.tw/iPhone/TCatApp.aspx'
    API_VERSION = '24.26'

    class RequestError < StandardError; end

    def initialize(timeout: 30)
      @timeout = timeout
    end

    def post(params)
      uri = URI("#{API_ENDPOINT}?ver=#{API_VERSION}")
      http = setup_http_client(uri)
      
      request = Net::HTTP::Post.new(uri)
      DEFAULT_HEADERS.each { |key, value| request[key] = value }
      request.body = URI.encode_www_form(params)

      handle_response(http.request(request))
    rescue Net::ReadTimeout, Net::OpenTimeout => e
      raise RequestError, "Request timeout: #{e.message}"
    rescue SocketError, Net::HTTPError => e
      raise RequestError, "Network error: #{e.message}"
    rescue StandardError => e
      raise RequestError, "Unexpected error: #{e.message}"
    end

    private

    def setup_http_client(uri)
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true
      http.read_timeout = @timeout
      http.open_timeout = @timeout
      http
    end

    def handle_response(response)
      case response
      when Net::HTTPSuccess
        response.body
      when Net::HTTPRedirection
        raise RequestError, "Unexpected redirect to #{response['location']}"
      else
        raise RequestError, "HTTP #{response.code}: #{response.message}"
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
tcat-0.1.8 lib/tcat/http_client.rb
tcat-0.1.7 lib/tcat/http_client.rb
tcat-0.1.6 lib/tcat/http_client.rb
tcat-0.1.5 lib/tcat/http_client.rb