nitcorn :: ProxyAction :: defaultinit
# A request proxy. All requests received by this action will be redirected to
# its target. All headers are forwarded including User-Agent.
#
# Please note: Requests passed to this action are blocking.
class ProxyAction
super Action
# Target interface where to dispatch proxied requests
var target: Interface
redef fun answer(http_request, turi) do
var request = new CurlHTTPRequest("http://{self.target}{turi}")
var curl_headers = new HeaderMap
for k, v in http_request.header do
if k == "User-Agent" then
request.user_agent = v
else
curl_headers[k] = v
end
end
var curl_response = request.execute
var response: HttpResponse
if curl_response isa CurlResponseSuccess then
response = new HttpResponse(curl_response.status_code)
response.body = curl_response.body_str
else if curl_response isa CurlResponseFailed then
response = new HttpResponse(500)
# CURLE_COULDNT_RESOLVE_HOST
if curl_response.error_code == 6 then
response.status_code = 502 # Bad Gateway
# CURLE_URL_MALFORMAT
else if curl_response.error_code == 3 then
response.status_code = 520 # Unknown Error
# CURLE_COULDNT_CONNECT
else if curl_response.error_code == 7 then
response.status_code = 502 # Bad Gateway
end
else abort
return response
end
end
lib/nitcorn/proxy.nit:23,1--71,3