Class: IceJade::Poster::Client
- Inherits:
-
Object
- Object
- IceJade::Poster::Client
- Includes:
- Transport
- Defined in:
- lib/ice_jade/poster/client.rb
Overview
通用 HTTP POST 客户端
零外部依赖,支持 JSON / Form / Multipart 三种常用提交方式, 内置超时控制、指数退避重试、统一 Response 包装,与 Quantum 模块风格一致。 底层传输能力(URI 拼接、请求执行、响应适配、超时重试)复用 IceJade::Transport,
Constant Summary
Constants included from Transport
Instance Attribute Summary
Attributes included from Transport
#base_url, #default_headers, #max_retries, #open_timeout, #timeout
Instance Method Summary collapse
-
#initialize(base_url: nil, headers: {}, timeout: 60, open_timeout: 10, max_retries: 2) ⇒ Client
constructor
A new instance of Client.
-
#post(url, body = nil, headers: {}, content_type: 'application/json') ⇒ IceJade::Response
发送通用 POST 请求.
-
#post_form(url, params = {}, headers = {}) ⇒ IceJade::Response
POST Form(传统表单提交).
-
#post_json(url, params = {}, headers = {}) ⇒ IceJade::Response
POST JSON(API 调用最常用).
-
#post_multipart(url, params = {}, headers = {}) ⇒ IceJade::Response
POST Multipart(文件上传).
Methods included from Transport
#adapt_response, #apply_headers, #build_multipart, #build_uri, #execute, #init_transport, #merge_headers, #mime_type, #normalize_headers
Constructor Details
#initialize(base_url: nil, headers: {}, timeout: 60, open_timeout: 10, max_retries: 2) ⇒ Client
Returns a new instance of Client.
30 31 32 33 34 |
# File 'lib/ice_jade/poster/client.rb', line 30 def initialize(base_url: nil, headers: {}, timeout: 60, open_timeout: 10, max_retries: 2) init_transport(base_url: base_url, headers: headers, timeout: timeout, open_timeout: open_timeout, max_retries: max_retries) end |
Instance Method Details
#post(url, body = nil, headers: {}, content_type: 'application/json') ⇒ IceJade::Response
发送通用 POST 请求
47 48 49 50 51 52 |
# File 'lib/ice_jade/poster/client.rb', line 47 def post(url, body = nil, headers: {}, content_type: 'application/json') uri = build_uri(url) merged_headers = merge_headers(default_headers, normalize_headers(headers)) req = build_request(uri, body, content_type, merged_headers) execute(uri, req) end |
#post_form(url, params = {}, headers = {}) ⇒ IceJade::Response
POST Form(传统表单提交)
72 73 74 |
# File 'lib/ice_jade/poster/client.rb', line 72 def post_form(url, params = {}, headers = {}) post(url, params, headers: headers, content_type: 'application/x-www-form-urlencoded') end |
#post_json(url, params = {}, headers = {}) ⇒ IceJade::Response
POST JSON(API 调用最常用)
63 64 65 |
# File 'lib/ice_jade/poster/client.rb', line 63 def post_json(url, params = {}, headers = {}) post(url, params, headers: headers, content_type: 'application/json') end |
#post_multipart(url, params = {}, headers = {}) ⇒ IceJade::Response
POST Multipart(文件上传)
83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/ice_jade/poster/client.rb', line 83 def post_multipart(url, params = {}, headers = {}) uri = build_uri(url) body, boundary = build_multipart(params) merged_headers = merge_headers(default_headers, normalize_headers(headers)) merged_headers['Content-Type'] = "multipart/form-data; boundary=#{boundary}" req = Net::HTTP::Post.new(uri) apply_headers(req, merged_headers) req.body = body execute(uri, req) end |