使用 rest-client 文件上传在 Yandex 上进行 Ruby 反向图像搜索

Posted

技术标签:

【中文标题】使用 rest-client 文件上传在 Yandex 上进行 Ruby 反向图像搜索【英文标题】:Ruby reverse image search on Yandex using rest-client file upload 【发布时间】:2021-03-14 01:30:46 【问题描述】:

我正在尝试在 ruby​​ 中克隆此堆栈溢出问题的最佳答案

Reverse search an image in Yandex Images using Python

require 'rest-client'
require 'pry'

response =  RestClient.post 'https://yandex.com/images/search', 
            proxy: 'http://1.1.1.1:8080',
            params: rpt: 'imageview', format: 'json', request: '"blocks":["block":"b-page_type_search-by-image__link"]', 
            :upload => File.new("/home/alex/Desktop/yandex_search/t2.jpg", 'rb'),
            multipart: true
            
binding.pry

我无法上传文件。不断得到回应 "Yandex.Images 中空请求的搜索结果"

【问题讨论】:

【参考方案1】:

根据 python 实现,参数看起来应该作为查询参数发送。

告诉 RestClient 将其作为查询参数发送的方法是使用 headers 参数中的 params 值。

require 'rest-client'

query_strings =  rpt: 'imageview', format: 'json', request: '"blocks":["block":"b-page_type_search-by-image__link"]'

RestClient.proxy = "http://1.1.1.1:8080"

result = RestClient.post(
  "https://yandex.com/images/search",
  :upfile => File.new("/home/alex/Desktop/yandex_search/t2.jpg", 'rb'),
  params: query_strings, multipart: true
)

【讨论】:

这是正确的,只需要将响应本身作为 JSON 获取,它就像 reponse = JSON.parse(result), image_link = response["blocks"][0]["参数"]["url"]

以上是关于使用 rest-client 文件上传在 Yandex 上进行 Ruby 反向图像搜索的主要内容,如果未能解决你的问题,请参考以下文章

使用 rest-client 发布请求创建新人

如何使用基于 HttpClient 和 .net4 的 Rest-client 进行身份验证

我如何处理rest-client 500错误响应并不断在我的循环中抓取?

如何通过命令行使用WisdomTool restclient?

rest-client restclient get post写法

标头/有效负载中的ruby rest-client内容