在ruby中,我正在对使用SSL的网站进行HTTP GET请求,由于某种原因,它 only 会为我提供通过HTTP代理(打suite套件)进行代理时所需的数据)。
例如:
if uri.port == 443
response = Net::HTTP.start(uri.host, uri.port, "172.16.38.182", "8080", :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) {|http|
http.request(request)
}
else
response = Net::HTTP.start(uri.host, uri.port) {|http|
http.request(request)
}
end
通过BurpSuite代理,可以看到所需的数据。但是,如果我在下面尝试以下方法:
if uri.port == 443
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) {|http|
http.request(request)
}
else
response = Net::HTTP.start(uri.host, uri.port) {|http|
http.request(request)
}
end
然后我得到如下十六进制字符:
有人知道为什么会这样吗?是因为使用了特定的SSL / TLS版本还是某种原因,Web应用程序代理知道如何与之交互,但net / https却不知道如何交互?无法解决这个问题。
答案 0 :(得分:2)
弄清其外观的原因是因为它以gzip
编码返回。
我能够通过使用以下命令成功对其进行解码:
if response['content-encoding'] == 'gzip'
gz = Zlib::GzipReader.new(StringIO.new(response.body.to_s))
uncompressed_string = gz.read
end