2013-07-30 3 views
3

내가시나 경로를 사용하고 내가 가능하면 해석하는 경로의 매개 변수로 일반 HTTP 주소 싶습니다Sinatra URL을 경로의 매개 변수로 사용하려면 어떻게해야합니까?

url http://somesite/blog/archives 

경로는 다음과 같습니다 코드는

/http://somesite/blog/archives 

를 :

get '/:url' do |u| 
(some code dealing with url) 

HTTP URL의 다양한 '/'가 문제를 일으키고 있습니다.

내가 찾은 해결 방법은 위의 예에서 'somesite'로 표현에만 URL 부분을 통과 한 다음 사용 :

get '/:url' do |u| 
buildUrl = "http://#{u}/blog/archives" 
(some code dealing with url) 

전체 URL을 직접 거래 할 수있는 방법이 있나요?

+0

최종 목표는 무엇에 데이터를 전송하여 사용자가 원하는대로 크롤링 할 수 있습니다? – mipadi

+0

제공된 URL을 웹 스크랩 : buildUrl. nokogiri를 사용하여 제공된 페이지를 처리합니다. 아마 sinatra의 사용법이 아닙니다. – blackbird014

답변

6

. 눈치 채 셨던 것처럼 슬래시가 문제를 일으 킵니다. 대신 URL의 일부가 아닌 쿼리 문자열 매개 변수로 URL을 전달할 수 있습니다.

get '/example' do 
    url = params[:url] 
    # do code with url 
end 

그럼 당신은 http://yoursite.com/example?url=http://example.com/blog/archives

+0

참고 : 크롤링중인 사이트에서도 검색어 문자열을 사용하는 경우에는 작동하지 않습니다. – AlexQueue

0

원하는 것은 분명하지 않지만 일반적으로 Ruby에 내장 된 URI 클래스는 URL을 벗겨 내고 조작 한 다음 재구성하는 데 유용합니다. 충분히 정교하지의 경우, Addressable::URI 보석은 누락 된 구멍에 작성해야합니다 : 사용자가 지정한대로이 작동하지 않습니다

require 'uri' 
param = '/http://somesite/blog/archives' 
scheme, userinfo, host, port, registry, path, opaque, query, fragment = URI.split(param[1..-1]) 
=> ["http", nil, "somesite", nil, nil, "/blog/archives", nil, nil, nil] 
+0

내가 원하는 것은 sinatra 경로의 호출자로서 컨트롤러에서 구문 분석하고자하는 URL을 전달한다는 것입니다 (원래의 질문에서 해결 방법을 확인하십시오). 이것은 경로가/: url로 정의되고 URL 자체가 브라우저에서 전달되어야 함을 의미합니다. 문제는 sinatra가 /와 경로를 일치시킬 수 없다는 것이 브라우저가 모든 http url 다음에있을 때 매개 변수로 인식되기를 원할 때입니다. 따라서 내가 사용한 대안의 필요성. 나는 그걸로 살 수 있지만, 좋은 생각은 환영보다. 고맙습니다. 답변 : – blackbird014

관련 문제