我試圖使用Ruby Sinatra和創建特定的網頁一個簡單的代理單頁的代理。我能做到這一點在C#中,我似乎無法去解決它的末日,在C#代碼如下:創建使用Ruby西納特拉
<%@ 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;
}
}
}
紅寶石西納特拉的代碼,我已經試過如下:
require 'rubygems'
require 'sinatra'
get '/mapsproxy/staticmap' do
request.path_info = 'http://maps.google.com/maps/api/staticmap'
pass
end
我假設西納特拉一個不工作(獲得404)如只將請求傳遞給頁面在同一個域中。任何hep將不勝感激。
編輯:
隨着鐵皮人的幫助下,我想出了一個很好的解決方案簡潔,這對我來說工作得很好:
get '/proxy/path' do
URI.parse(<URI> + request.query_string.gsub("|", "%7C")).read
end
感謝所有幫助。
乾杯。這看起來很有希望......我現在只是在嘗試一些東西...... – 2011-02-11 15:24:04
您需要添加一些異常處理,並且可能希望使用`Timeout`模塊來提供更好的控制,以便在請求也被採用時長。請參閱http://stackoverflow.com/questions/4964044/using-open-uri-to-fetch-xml-and-the-best-practice-in-case-of-problems-with-a-remo/4966240#4966240舉些例子。 – 2011-02-11 15:30:07