Nếu http://foo.com
chuyển hướng đến 1.2.3.4
sau đó chuyển hướng đến http://finalurl.com
, làm cách nào tôi có thể sử dụng Ruby để tìm URL đích "http://finalurl.com"?Làm thế nào tôi có thể nhận được URL cuối cùng sau khi chuyển hướng bằng Ruby?
Trả lời
Dưới đây là hai cách, sử dụng cả hai HTTPClient và Open-URI:
require 'httpclient'
require 'open-uri'
URL = 'http://www.example.org'
httpc = HTTPClient.new
resp = httpc.get(URL)
puts resp.header['Location']
>> http://www.iana.org/domains/example/
open(URL) do |resp|
puts resp.base_uri.to_s
end
>> http://www.iana.org/domains/example/
Tốt hơn nên sử dụng httpc.head (URL) thay vì httpc.get (URL). Điều này ngăn không cho toàn bộ trang web tải. – cavneb
Đồng ý, * NẾU * máy chủ sẽ/có thể thực hiện chuyển hướng trên HEAD. Tôi đã thấy các phản hồi CHÍNH hiển thị lỗi không có chuyển hướng. Tôi nghĩ rằng đó là bởi vì một HEAD là khám phá nhiều hơn. Và hành vi đó có thể đã bị cô lập đối với một số HTTPd và các tiêu chuẩn, hoặc các phiên bản nhất định, thay đổi để nó không còn là vấn đề nữa. –
Tôi so sánh http, curl và các phương thức mở và kết quả là không nhất quán. Một số cho kết quả cho các url mà những người khác thì không. Tôi bắt đầu tự hỏi có bao nhiêu trường hợp khác nhau mà trình duyệt web đề cập đến để có được sự nhất quán này. Tôi ước tôi có cùng một viên hồng ngọc. –
Tôi không nhiều của một người sử dụng Ruby, nhưng những gì về cơ bản bạn cần là một cái gì đó để giải thích tiêu đề HTTP. Thư viện sau xuất hiện để làm điều đó: "sau chuyển hướng"
http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html
Bỏ xuống
Một cách khác, sử dụng Curb:
def get_redirected_url(your_url)
result = Curl::Easy.perform(your_url) do |curl|
curl.follow_location = true
end
result.last_effective_url
end
Điều này không hoạt động đáng tin cậy. –
tôi đã thực hiện một RequestResolver cho nhu cầu của tôi:
https://gist.github.com/lulalala/6be104641bcb60f9d0e8
Nó sử dụng Net :: HTTP và theo nhiều chuyển hướng. Nó cũng xử lý các chuyển hướng tương đối. Đó là vì nhu cầu đơn giản của tôi nên có thể có lỗi. Nếu bạn phát hiện ra một xin vui lòng cho tôi biết.
cho JRuby
này làm việc
def get_final_url (url)
final_url = ""
until url.nil? do
final_url = url
url = Net::HTTP.get_response(URI.parse(url))['location']
end
final_url
end
- 1. Tôi làm cách nào để nhận URL chuyển hướng cuối cùng khi sử dụng urllib2.urlopen?
- 2. Nhận url sau khi curl được chuyển hướng
- 3. Nhận url cuối cùng từ đối tượng XHR sau khi chuyển hướng
- 4. java URLConnection có được chuyển hướng URL cuối cùng
- 5. Nhận URL sau khi chuyển hướng bằng HttpClient.Execute (HttpGet)
- 6. Làm cách nào để tìm URL cuối cùng sau tất cả các chuyển hướng trong Perl?
- 7. Trong golang, làm thế nào để xác định URL cuối cùng sau một loạt các chuyển hướng?
- 8. Liệu mã cuối cùng có được chạy sau khi chuyển hướng không?
- 9. Làm thế nào tôi có thể chuyển hướng sau khi trì hoãn() với jQuery?
- 10. Làm cách nào để nhận URL cuối cùng, được chuyển hướng, chuẩn của một trang web sử dụng PHP?
- 11. Tôi làm cách nào để có được url chuyển hướng bằng javascript?
- 12. Nhận các ký tự sau/cuối cùng trong url
- 13. Chuyển hướng đến URL cụ thể sau khi đăng nhập
- 14. làm cách nào tôi có thể nhận id cuối cùng được chèn vào trong formview
- 15. Làm thế nào tôi có thể nhận được System.Net.Http.HttpClient để không theo 302 chuyển hướng?
- 16. Làm thế nào tôi có thể nhận được giá trị nguồn và biến trong tracebacks ruby?
- 17. Làm thế nào tôi có thể nhận được hướng chuyển động bằng cách sử dụng gia tốc kế?
- 18. Tôi có thể thực hiện biến cuối cùng sau khi nó đã được khai báo không?
- 19. Nhận URL được chuyển hướng từ URL gốc
- 20. jQuery - Nhận URL iframe SAU chuyển hướng trên cùng một miền
- 21. Cho một URL, làm thế nào tôi có thể nhận được chỉ là tên miền?
- 22. Làm thế nào tôi có thể rollback lệnh xóa cuối cùng của tôi trong mysql?
- 23. làm thế nào để có được giới thiệu từ một url chuyển hướng
- 24. Làm cách nào tôi có thể chụp được hướng nào đang được quét bằng UIPanGestureRecognizer?
- 25. trong javascript, làm thế nào tôi có thể nhận được ký tự cuối cùng trong một chuỗi
- 26. Làm cách nào để tôi có thể đặt cookie và sau đó chuyển hướng trong PHP?
- 27. Làm thế nào bạn có thể trả lại mọi thứ sau dấu gạch chéo cuối cùng (/) trong chuỗi Ruby
- 28. Làm cách nào để nhận được url được chuyển hướng từ mô-đun yêu cầu nodejs?
- 29. Làm thế nào để ngăn chặn jQuery ajax sau khi chuyển hướng sau khi đăng bài?
- 30. Làm thế nào để tôi biết khi nào async cuối cùng được thực hiện?
Hãy thể hiện một số mẫu mã vì vậy chúng tôi có thể cho biết những gì HTTP khách hàng mà bạn đang sử dụng. –
tôi sử dụng [final_redirect_url] (https://rubygems.org/gems/final_redirect_url) đá quý để có được url chuyển thức. Nó chỉ trả về URL cuối cùng dưới dạng chuỗi. – Indyarocks