2012-07-25 4 views
4

사용자로부터 URI/URL 문자열을 가져와 작동하는 정식 양식을 결정하는 방법을 찾고 있습니다 (또는 자원이 유효한). 동시에 URL이 있는지도 확인해야합니다. 그래서 우리는 유효한 "문법"과 존재를 확인하고 있습니다. 예를 들어Ruby에서 URI/URL을 용서하게 표준화하는 방법

google.com 같은 문자열은 http://www.google.com로 전환해야하며, google.com/insights 같은 문자열은 http://www.google.com/insights로 전환해야합니다. http://thiswebsitedoesntexistatall.com과 같은 문자열은 일종의 오류나 예외를 반환합니다.

200 OK 상태가 될 때까지 솔루션의 일부가 HTTP get_response() 메서드를 호출하고 리디렉션되는 것으로 보입니다.

URI.parse() 방법은 http을 벗어나는 것을 용인하지 않는 것 같습니다. http을 앞에 추가하는 간단한 방법을 쓸 수 있다는 것을 알았지 만, URL에 대해 정말로 용서할 수있는 일부 기존의 보석 또는 거의 알려지지 않은 라이브러리 기능이 있었으면 좋겠다.

net/httpHTTParty 모두 내가 찾고있는 것에 너무 엄격한 것 같습니다. 이것을 할 수있는 좋은 방법이 있습니까?

답변

3

당신이 요구하는지에 몇 가지 문제가 있습니다 : FTP 및 다른 많은 protocols 동등하게 유효한 경우

  • 에 대한 URL 파서에 전달 된 값은 HTTP 가정해서는 안된다. 프로토콜이 HTTP 일 가능성이 높은 경우 프로토콜을 추가해야합니다.
  • 200 개의 응답을 얻을 때까지 사이트에 연결하고 리디렉션을 따라하면 URL이 일종의 유효한 페이지로 확인된다는 사실 만 입증되었습니다. 200 번은 원하는 페이지가 유효하지 않거나 유효하지 않거나 사이트가 일시적으로 다운 되었기 때문에 반환 된 오류 페이지 일 수 있습니다. 그렇지 않다는 것을 증명하려면 검색 할 특정 컨텐츠와 같이 찾고있는 페이지에 대한 사전 지식이 필요하다는 것을 의미합니다.
  • 리디렉션을 수행 한 후에 URL이 양호하다고 가정하면 매우 안전하지 않습니다. 많은 사이트가 모든 종류의 세션 데이터를 URL에 추가하므로 간단하고 깨끗한 URL로 시작할 수있는 것은 길고 복잡한 URL로 해결할 수 있습니다.

나는 Addressable::URI 보석을 보시기 바랍니다. Ruby의 URI보다 훨씬 완벽한 기능을 제공합니다. 그것은 당신을위한 결정을 내리지는 못하지만, 적어도 당신에게 더 완전한 API를 제공 할 것이고, URL을 재 작성/정규화 할 수 있습니다. 그 (것)들을 청소하고 그리고/또는 그들이 좋은가 결정하는 것은 당신을위한 운동으로 지금 남겨둔다.

+0

답변 해 주셔서 감사합니다. 첫 번째 요점에 관해서는 - 나는 완전히 동의합니다. 나는 다른 프로토콜을 받아 들여야한다고 생각한다. 그래서 나는 http를 앞쪽으로 밀고 싶지 않다. 즉, 하루가 끝날 무렵 http가 실제로 관심이있는 것 같습니다. 두 번째 문제는 페이지가 누락 된 경우 200 대신 404가 표시된다는 것입니다. 200 응답은 유효한 페이지이고 존재하지만 다른 응답 코드를 사용해야한다는 것을 암시합니다. 세션 데이터에 대해 제기하는 요점은 흥미로운 것입니다 ... 나는 그것에 대해 생각해야 할 것입니다. 감사! – aardvarkk

+1

사이트가 404 또는 200을 반환하는지 여부는 HTTPd가 오류를 반환하도록 허용하는지, 아니면 HTTPd가 오류를 가로 채고 가로 채어 "친숙하고 친절한"오류 페이지 중 하나로 리디렉션하는지에 따라 다릅니다. 잘못하고 404를 반환하는 올바른 일을하지 마십시오. 200은 인간에게는 문제가되지 않지만 [코드를 처리하는 데 어려움이 있습니다] (http://gsitecrawler.com/articles/error-404-200.asp). 따라서 "해야 할 것"은 우리가 누구를 다루고 있는지에 달려 있습니다.불행히도 개발자와 사용자는 일반적으로 콘텐츠에 대해 말하지 않습니다. –

+0

FYI와 마찬가지로 사이트를 다루고 웹 사이트 분석 코드를 작성하고 작성하는 많은 어려운 지식에 대한 응답을 기반으로합니다 ... 200 개의 다른 거미 및 어딘가의 어딘가에 있습니다. RFCs와 specs가 있습니다. 그리고 현실이 있습니다. 우리는 훈련받지 않거나 무지한 페이지 개발자의 결과물을 다루기 위해 현실을 위해 프로그램해야합니다. –

관련 문제