[RUBY-ON-RAILS] 루비의 URL의 리디렉션을 받기
RUBY-ON-RAILS루비의 URL의 리디렉션을 받기
북 그래프 API에 따라 우리는 (실시 예)와 사용자 프로파일 사진을 요구할 수있다 :
https://graph.facebook.com/1489686594/picture
그러나 이전 링크의 실제 이미지의 URL은 다음과 같습니다
http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs356.snc4/41721_1489686594_527_q.jpg
브라우저의 첫 번째 링크를 입력하면, 제 2 링크로 리디렉션됩니다.
첫 번째 URL을 알고에 의해, 루비 / 레일에 전체 URL (두 번째 링크)를 얻을 수있는 방법이 있습니까?
(이것은 루비에 대한이 질문의 반복이지만)
해결법
-
==============================
1.당신은 인터넷 : HTTP를 사용하여 위치를 읽을 수 있습니다 : 헤더를 응답에서
당신은 인터넷 : HTTP를 사용하여 위치를 읽을 수 있습니다 : 헤더를 응답에서
require 'net/http' require 'uri' url = URI.parse('http://www.example.com/index.html') res = Net::HTTP.start(url.host, url.port) {|http| http.get('/index.html') } res['location']
-
==============================
2.이것은 이미 정답을했지만, 훨씬 더 간단한 방법이있다 :
이것은 이미 정답을했지만, 훨씬 더 간단한 방법이있다 :
res = Net::HTTP.get_response(URI('https://graph.facebook.com/1489686594/picture')) res['location']
-
==============================
3.당신이 그것을 처리 할 수 있도록, HTTPS URL이 거기에있어 ...
당신이 그것을 처리 할 수 있도록, HTTPS URL이 거기에있어 ...
require 'net/http' require 'net/https' if RUBY_VERSION < '1.9' require 'uri' u = URI.parse('https://graph.facebook.com/1489686594/picture') h = Net::HTTP.new u.host, u.port h.use_ssl = u.scheme == 'https' head = h.start do |ua| ua.head u.path end puts head['location']
-
==============================
4.나는이 오래된 질문 알아요,하지만 난 후손이 대답을 추가 할 것입니다 :
나는이 오래된 질문 알아요,하지만 난 후손이 대답을 추가 할 것입니다 :
난 단지 본 적이 솔루션의 대부분은 하나의 리디렉션을 수행합니다. 내 경우, 나는 실제 최종 목적지의 URL을 얻기 위해 여러 리디렉션을 수행했다. 그래서 같이 (난간 보석을 통해) 컬을 사용 :
result = Curl::Easy.perform(url) do |curl| curl.head = true curl.follow_location = true end result.last_effective_url
-
==============================
5.당신은 응답 상태 코드를 확인하고 get_final_redirect_url 방법 같은 것을 사용하여 반복적으로 최종 URL을 얻을 수 있습니다 :
당신은 응답 상태 코드를 확인하고 get_final_redirect_url 방법 같은 것을 사용하여 반복적으로 최종 URL을 얻을 수 있습니다 :
require 'net/http' def get_final_redirect_url(url, limit = 10) uri = URI.parse(url) response = ::Net::HTTP.get_response(uri) if response.class == Net::HTTPOK return uri else redirect_location = response['location'] location_uri = URI.parse(redirect_location) if location_uri.host.nil? redirect_location = uri.scheme + '://' + uri.host + redirect_location end warn "redirected to #{redirect_location}" get_final_redirect_url(redirect_location, limit - 1) end end
저도 같은 문제에 직면했다. 그 모든 사람들이 혜택을 누릴 수 있도록 나는 그것을 해결하고 주위에 보석 final_redirect_url을 만들었습니다.
현재 사용에 대한 자세한 내용을 확인할 수 있습니다.
-
==============================
6.그래, "위치"응답 헤더는 당신에게 실제 이미지 URL을 말한다.
그래, "위치"응답 헤더는 당신에게 실제 이미지 URL을 말한다.
귀하의 사이트에서 사용자의 프로필 이미지로 사진을 사용하는 경우, 당신이 "https://graph.facebook.com/:user_id/picture"스타일의 URL 대신 실제 이미지 URL을 사용하는 것이 좋습니다. 그렇지 않으면, 사용자는 앞으로 "을 (를) 찾을 수 없습니다"이미지 또는 오래된 프로필 이미지를 많이 볼 수 있습니다.
당신은 "IMG"태그의 "SRC"속성으로 "https://graph.facebook.com/:user_id/picture"를 넣어. 그들은 브라우저는 사용자의 업데이트 된 이미지를 가져옵니다.
추신. 나는 트위터 및 야후!와 내 사이트에 같은 문제가 지금 오픈 아이디 ..
-
==============================
7.당신은 해결책이 원하는 경우 :
당신은 해결책이 원하는 경우 :
require 'net/http' require 'uri' def follow_redirections(url) response = Net::HTTP.get_response(URI(url)) until response['location'].nil? response = Net::HTTP.get_response(URI(response['location'])) end response.uri.to_s end # EXAMPLE USAGE follow_redirections("https://graph.facebook.com/1489686594/picture") # => https://static.xx.fbcdn.net/rsrc.php/v3/yo/r/UlIqmHJn-SK.gif
from https://stackoverflow.com/questions/5872210/get-redirect-of-a-url-in-ruby by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 한 도메인에서 다른 도메인으로 리디렉션하는 레일 경로를 사용할 수 있습니까? (0) | 2020.03.02 |
---|---|
[RUBY-ON-RAILS] 초기화되지 않은 상수의 MysqlCompat : (mms2r 보석을 사용하여) MysqlRes (0) | 2020.03.02 |
[RUBY-ON-RAILS] 레일 모델에 외래 키 추가 (0) | 2020.03.02 |
[RUBY-ON-RAILS] JSON으로 설정 RSpec에 기본 GET 요청 형식 (0) | 2020.03.02 |
[RUBY-ON-RAILS] 레일 유효성 검사의 순서를 제어 (0) | 2020.03.02 |