我有一个非常基本的webrick服务器,用于嵌入式设备的管理页面.我们刚刚为设备添加了基本身份验证,它运行良好,但是您可以像这样获得通用的"未授权"消息:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD><TITLE>Unauthorized</TITLE></HEAD>
<BODY>
<H1>Unauthorized</H1>
WEBrick::HTTPStatus::Unauthorized
<HR>
<ADDRESS>
WEBrick/1.3.1 (Ruby/2.2.0/2014-12-25) at
192.168.1.1:1234
</ADDRESS>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何覆盖它以返回静态HTML文件?
看一下源代码,它看起来像是httpresponse.rb一个叫做"钩子" create_error_page:
if respond_to?(:create_error_page)
create_error_page()
return
end
Run Code Online (Sandbox Code Playgroud)
所以,如果你添加自己的Ruby方法调用,create_error_page在WEBrick::HTTPResponse,你可以设置自己的标记:
module WEBrick
class HTTPResponse
def create_error_page
@body = ''
@body << <<-_end_of_html_
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD><TITLE>#{HTMLUtils::escape(@reason_phrase)}</TITLE></HEAD>
<BODY>
<H1>#{HTMLUtils::escape(@reason_phrase)}</H1>
<HR>
<P>Custom error page!</P>
</BODY>
</HTML>
_end_of_html_
end
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,您可以访问的变量,比如@reason_phrase和ex.code.在您的情况下,您可以根据需要使用ex.code(例如:) 401设置不同的内容.
下面是一个完整的示例,您可以在irb显示自定义错误页面的控制台中运行(请注意,它假定您Public在文件系统中调用了一个目录):
require 'webrick'
module WEBrick
class HTTPResponse
def create_error_page
@body = ''
@body << <<-_end_of_html_
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD><TITLE>#{HTMLUtils::escape(@reason_phrase)}</TITLE></HEAD>
<BODY>
<H1>#{HTMLUtils::escape(@reason_phrase)}</H1>
<HR>
<P>Custom error page!</P>
</BODY>
</HTML>
_end_of_html_
end
end
end
root = File.expand_path '~/Public'
server = WEBrick::HTTPServer.new :Port => 8000, :DocumentRoot => root
trap 'INT' do server.shutdown end
server.start
Run Code Online (Sandbox Code Playgroud)
当你转到http://localhost:8000/bogus(一个不存在的页面)时,你应该看到自定义错误页面,如下所示:
希望能帮助到你!: - ]
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |