Html 如何在Sinatra制作代理?

Html 如何在Sinatra制作代理?,html,ruby,proxy,sinatra,Html,Ruby,Proxy,Sinatra,我想制作一个简单的Sinatra应用程序,当我导航到“/proxy/:someurl”时,我将看到直接导航到:someurl的确切内容,也就是一个简单的web代理,有点像一个完整的iframe页面 最好的方法是什么?最简单的方法是使用RestClient并说: get '/proxy/:url' do |url| RestClient.get(url) end 这将代理任何成功获取的内容。再做一点工作,就可以通过管道传递内容类型和缓存控制头。再多一点,就可以传递错误代码。然后发帖。然后 也

我想制作一个简单的Sinatra应用程序,当我导航到“/proxy/:someurl”时,我将看到直接导航到:someurl的确切内容,也就是一个简单的web代理,有点像一个完整的iframe页面


最好的方法是什么?

最简单的方法是使用RestClient并说:

get '/proxy/:url' do |url|
  RestClient.get(url)
end
这将代理任何成功获取的内容。再做一点工作,就可以通过管道传递内容类型和缓存控制头。再多一点,就可以传递错误代码。然后发帖。然后

也就是说,我不会进一步帮助您,因为让您的web服务器代理任意内容是一个糟糕的想法。它破坏了网络安全的基础。它很慢(占用您的web服务器等待另一个web服务器)和/或不重要(如果您使用
sinatra async
+
em http请求
)。它使您的web服务器成为一个匿名者,这完全会招致滥用。只是不要

  • 代理任意URL:错误
  • 从您信任的特定URL代理某些内容:可能还可以,但仍然可能不是最佳解决方案
该脚本获取页面内容,修复脚本、样式表和图像链接,然后显示结果


我使用了一个
/proxy?url=http://url.com/
路由,而不是
/proxy/url
路由。Sinatra不喜欢通常在URL中使用的斜杠和特殊字符。

这是可行的,但scrips和样式表不起作用。你试过那个代码吗?事实上它有时有效(比如雅虎网站),但其他网站(比如哈博萨网站),你知道为什么吗?顺便说一句,它可以处理的东西比不能处理的多得多。使用
openuri
不仅可以代理HTTP内容,还可以代理本地文件:
GET/proxy?url=/etc/passwd
。玩得高兴是的,我试过了,我刚写的。它不适用于habosa,因为用site.com/asset\u link替换资产链接的正则表达式并不完美,它会寻找一个不存在的
/
,因为您的资产是相对的。我想最好使用DOM解析URL而不是正则表达式。我可能可以使用更多的代码来清理其余的,谢谢!
require 'sinatra'
require 'open-uri'

get '/proxy' do
  url = params[:url]
  raise "GTFO" if (url[0] == '/' || url[0] == '.')
  open(url) do |content|
    content.read.to_s.gsub(/(href|src)=("|')\//, '\1=\2' + url + '/')
  end
end