Skip to content

Commit f18e149

Browse files
committed
Fallback to GET when HEAD is not allowed (nanoc#274)
1 parent 41beb78 commit f18e149

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

lib/nanoc/extra/checking/checks/external_links.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ def validate(href)
103103
begin
104104
Timeout::timeout(10) do
105105
res = request_url_once(url)
106+
if res.code == '405'
107+
res = request_url_once(url, Net::HTTP::Get)
108+
end
106109
end
107110
rescue => e
108111
return Result.new(href, e.message)
@@ -133,9 +136,9 @@ def validate(href)
133136
raise 'should not have gotten here'
134137
end
135138

136-
def request_url_once(url)
139+
def request_url_once(url, req_method = Net::HTTP::Head)
137140
path = (url.path.nil? || url.path.empty? ? '/' : url.path)
138-
req = Net::HTTP::Head.new(path)
141+
req = req_method.new(path)
139142
http = Net::HTTP.new(url.host, url.port)
140143
if url.instance_of? URI::HTTPS
141144
http.use_ssl = true

test/extra/checking/checks/test_external_links.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,18 @@ def check.request_url_once(url)
3838
end
3939
end
4040

41+
def test_fallback_to_get_when_head_is_not_allowed
42+
with_site do |site|
43+
#Create check
44+
check = Nanoc::Extra::Checking::Checks::ExternalLinks.new(site)
45+
def check.request_url_once(url, req_method = Net::HTTP::Head)
46+
Net::HTTPResponse.new('1.1', (req_method == Net::HTTP::Head || url.path == '/405') ? '405' : '200', 'okay')
47+
end
48+
49+
#Test
50+
assert_nil check.validate('http://127.0.0.1:9204')
51+
refute_nil check.validate('http://127.0.0.1:9204/405')
52+
end
53+
end
54+
4155
end

0 commit comments

Comments
 (0)