Я попытался собрать собственный адаптер Фарадея для выполнения HTTP-запросов с использованием сокета Unix с использованием NetX::HTTPUnix. Код выглядит следующим образом:
module Faraday
class Adapter
class NetHttpUnix < Faraday::Adapter::NetHttp
def perform_request(http, env)
if :get == env[:method] and !env[:body]
# prefer `get` to `request` because the former handles gzip (ruby 1.9)
http.get env[:url], env[:request_headers]
else
http.request create_request(env)
end
end
def create_request(env)
request = Net::HTTPGenericRequest.new \
env[:method].to_s.upcase, # request method
!!env[:body], # is there request body
:head != env[:method], # is there response body
"/", # request uri path (i'm just hard coding / because URI::Generic doesn't have a uri_path method
env[:request_headers] # request headers
if env[:body].respond_to?(:read)
request.body_stream = env[:body]
else
request.body = env[:body]
end
request
end
def net_http_connection(env)
socket = env[:url].to_s
NetX::HTTPUnix.new(socket)
end
end
end
end
Faraday::Adapter.register_middleware net_http_unix: Faraday::Adapter::NetHttpUnix
Однако, когда я пытаюсь сделать запрос с помощью этого адаптера, я получаю ошибку Faraday::ConnectionError. Когда я смотрю на трассировку исключения, я вижу, что код пытается открыть сокет TCP в http.rb.
Существует ли уже адаптер Фарадея, который работает с сокетами Unix? Я не хочу изобретать велосипед здесь.
(...)
для их инкапсуляции. Обратная косая черта здесь очень неправильная. - person tadman   schedule 31.08.2016