2

したがって、APIに対するいくつかのajaxリクエストを満たすには、mydomain.com / proxys/www.msn.comのようなURLをヒットする必要があります。

私のルートで私は持っています

get "/proxies/:url" => "proxies#get"

そして私は私が持っているコントローラーにいます

url_contents = Net::HTTP.get(URI.parse(params[:url]))

/ proxys / wwwを置くと、

undefined method `request_uri' for #<URI::Generic:0x3f89508 URL:www>

/proxies/www.msn.comを置くと

私は得る

[GET]「/proxies/www.msn.com」に一致するルートはありません

4

3 に答える 3

1

ここには2つの別々の問題があります:

  1. スキームのない URL を HTTP URL として処理しようとしています。
  2. ルートは、期待どおりに s とドットとスラッシュが/proxies一致しません。:url

最初のものについては、スキーマを手動で追加する必要があります。

url = 'http://' + params[:url]
content = Net::HTTP.get(URI.parse(url))

2 つ目については、splat-route を使用して、埋め込まれたスラッシュを処理し、Rails がたとえば形式として:format => falseを処理しようとしないようにすることができます。.com

get '/proxies/*url' => 'proxies#get', :format => false

を使用する:urlと、Rails は埋め込まれたスラッシュをコンポーネントの区切りとして認識しますが、これはおそらくあなたが望むものではありません。がなければ、Rails はURL の一部としてではなく、形式 ( 、 、 ... など) として解釈しよ:format => falseうとします。.XX.html.json

于 2012-10-14T06:04:28.020 に答える
0

これは Rails-2 に適用されます

問題はdot(.)私が推測することです。以下のようなことを試してみましたが、うまくいきました。

#routes.rb
map.get_proxy 'proxies/:url', :controller => "Proxies", :action => "get", :requirements => { :url => /.*/ }

#view file
#Here dot(.) are needed to replace with its encoded string %2E
<%= link_to 'Get The Site', get_proxy_url('www.msncom') %>


#Proxies Controller
#After receiving the url the %2E need to conovert to dot(.) again.
url_contents = Net::HTTP.get(URI.parse('http://'+params[:url]))

@muが述べたように変更されました。

于 2012-10-14T06:06:11.203 に答える
-1
match '/proxies/:url' => 'proxies#get', :as => :proxies_get
于 2012-10-14T05:21:18.053 に答える