0
私はレールでAPIを作るために練習しています。 apiには現在get要求でURLを受け取るエンドポイントが1つしかありません。私のルートは以下のとおりです。レールの動的URLを
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
namespace :api, defaults: { format: :json } do
namespace :v1 do # resources :orders
get "*link" => "application#parse_link"
end
end
end
マイアプリケーションコントローラコード:
require 'open-uri'
class Api::V1::ApplicationController < ActionController::Base
respond_to :json
# protect_from_forgery with: :exception
def parse_link
begin
url = URI.parse(params[:link])
doc = Nokogiri::HTML(open(url).read)
rescue
redirect_to 'http://localhost:3000/'
end
end
end
私は、このようなURLを送信すると:それは
しかし、URLの次のタイプを正常に動作
http://localhost:3000/api/v1/http://stackoverflow.com/questions/41138538/dynamic-urls-in-rails-params
動作しません:
この場合、http://localhost:3000/api/v1/http://stackoverflow.com/
0、それはあなたがそれが与えられたURLを分割表示し、リンクのparamと「.COM」の部分で、それの半分を節約することができるように、これらののparams
<ActionController::Parameters {"link"=>"http:/stackoverflow", "format"=>"com"} permitted: true>
私に与えてリンクを分割し、フォーマットパラメータ。
おかげ
パラメータにhttp:// localhost:3000/api/v1/http%3A%2F%2Fstackoverflow.com%2F'のURLエスケープ特殊文字が含まれています。これで十分でない場合は、ドットをエスケープしてください。 –
しかし、エンコードはparamsで行われます......... Paramは既に分割されています......完全なURLではありません –
Nahはエンコードしてリクエストを送信します。 APIクライアントで。もちろん、APIサーバーではありません。 –