Я пытаюсь использовать Ruby Sinatra для создания простого прокси для конкретной веб-страницы. Я могу сделать это в C #, я просто не могу решить это для Синатры, код C # ниже:
<%@ WebHandler Language="C#" Class="Map" %>
using System;
using System.Web;
using System.Net;
using System.IO;
public class Map : IHttpHandler {
static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[0x1000];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
output.Write(buffer, 0, read);
}
public void ProcessRequest(HttpContext context)
{
string gmapUri = string.Format("http://maps.google.com/maps/api/staticmap{0}", context.Request.Url.Query);
WebRequest request = WebRequest.Create(gmapUri);
using (WebResponse response = request.GetResponse())
{
context.Response.ContentType = response.ContentType;
Stream responseStream = response.GetResponseStream();
CopyStream(responseStream, context.Response.OutputStream);
}
}
public bool IsReusable {
get {
return false;
}
}
}
Код Ruby Sinatra, который я пробовал, выглядит следующим образом:
require 'rubygems'
require 'sinatra'
get '/mapsproxy/staticmap' do
request.path_info = 'http://maps.google.com/maps/api/staticmap'
pass
end
Я предполагаю, что Sinatra один не работает (получите 404), поскольку он только передает запрос на страницы в том же домене. Любая гепатита будет принята с благодарностью.
EDIT:
С помощью Жестяного человека я нашел хорошее, лаконичное решение, которое хорошо мне подходит:
get '/proxy/path' do
URI.parse(<URI> + request.query_string.gsub("|", "%7C")).read
end
Спасибо за помощь.