62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
module Ethon
|
|
class Easy
|
|
# This module contains the logic around adding headers to libcurl.
|
|
#
|
|
# @api private
|
|
module Header
|
|
# Return headers, return empty hash if none.
|
|
#
|
|
# @example Return the headers.
|
|
# easy.headers
|
|
#
|
|
# @return [ Hash ] The headers.
|
|
def headers
|
|
@headers ||= {}
|
|
end
|
|
|
|
# Set the headers.
|
|
#
|
|
# @example Set the headers.
|
|
# easy.headers = {'User-Agent' => 'ethon'}
|
|
#
|
|
# @param [ Hash ] headers The headers.
|
|
def headers=(headers)
|
|
headers ||= {}
|
|
header_list = nil
|
|
headers.each do |k, v|
|
|
header_list = Curl.slist_append(header_list, compose_header(k,v))
|
|
end
|
|
Curl.set_option(:httpheader, header_list, handle)
|
|
|
|
@header_list = header_list && FFI::AutoPointer.new(header_list, Curl.method(:slist_free_all))
|
|
end
|
|
|
|
# Return header_list.
|
|
#
|
|
# @example Return header_list.
|
|
# easy.header_list
|
|
#
|
|
# @return [ FFI::Pointer ] The header list.
|
|
def header_list
|
|
@header_list
|
|
end
|
|
|
|
# Compose libcurl header string from key and value.
|
|
# Also replaces null bytes, because libcurl will complain
|
|
# otherwise.
|
|
#
|
|
# @example Compose header.
|
|
# easy.compose_header('User-Agent', 'Ethon')
|
|
#
|
|
# @param [ String ] key The header name.
|
|
# @param [ String ] value The header value.
|
|
#
|
|
# @return [ String ] The composed header.
|
|
def compose_header(key, value)
|
|
Util.escape_zero_byte("#{key}: #{value}")
|
|
end
|
|
end
|
|
end
|
|
end
|