繁体   English   中英

ruby http请求使用SSL冻结

[英]ruby http request freeze with SSL

我正在尝试使用ruby下载图像并发现有趣的问题

它是我下载图像的代码的一部分(仅HTTP请求):

HTTParty.get(url)

或搭配

Net::HTTP.new(URI.parse(url))

当我尝试从耐克下载图像时

url = 'https://c.static-nike.com/a/images/t_PDP_1728_v1/f_auto,b_rgb:f5f5f5/bfau7aauvleh5puvuiqa/zoom-pegasus-turbo-mens-running-shoe-Z163c3.jpg'

它运作良好

但由于某些原因,当我打开阿迪达斯时它会冻结:

url = 'https://www.adidas.com.sg/dis/dw/image/v2/bcbs_prd/on/demandware.static/-/Sites-adidas-products/default/dw0eb054ad/zoom/G27805_01_standard.jpg'

我有烂木

    SSL established
<- "GET /dis/dw/image/v2/bcbs_prd/on/demandware.static/-/Sites-adidas-products/default/dw0eb054ad/zoom/G27805_01_standard.jpg HTTP/1.1\r\nUser-Agent: Mozilla/5.0\r\nConnection: close\r\nHost: www.adidas.com.sg\r\n\r\n"

试图通过关闭SSL验证

 verify: false,

但这并不能解决我的痛苦\\ _(ツ)_ /¯

但是,对于两个URL,它都可以与curl -O一起使用

当缺少某些特定的标头时,它们可能会阻塞请求,因此您可能需要设置其中的一些:

 HTTParty.get(url, { headers: {
                       "User-Agent" => "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/7.0.4 Mobile/16B91 Safari/605.1.15",
                       "Accept-Language" => "en-US,en;q=0.9,bg;q=0.8",
                       "Accept-Encoding" => "gzip, deflate, br"
                     }
                   })

服务器端正在对Adidas URL进行过滤,这可能会阻止自动抓取。 至少必须指定其他标头才能成功建立连接。

以下示例成功从Adidas URL返回响应:

url = 'https://www.adidas.com.sg/dis/dw/image/v2/bcbs_prd/on/demandware.static/-/Sites-adidas-products/default/dw0eb054ad/zoom/G27805_01_standard.jpg'

headers = {
  'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Encoding' => 'br, gzip, deflate',
  'Accept-Language' => 'en-us'
}

response = HTTParty.get(url, headers: headers)
=> #<HTTParty::Response:0x7fcb02856298 parsed_response="\xFF\xD8\xFF\xE0\x00\x10JFIF ...

列出的三个标头是获得响应所需的唯一标头,但是所有三个标头都是必需的。

您可以从返回的响应中看到它正在返回JPEG ,因此此示例应按要求工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM