Мне нужно включить изображение в текст запроса Post, используя Ruby.В примере используется API визуального поиска Bing для поиска изображений, похожих на изображения, отправленные в теле сообщения.Я получаю результат, но это пустой JSON.Очевидно, что-то не так с кодом для настройки тела сообщения.Я новичок в языке Ruby.
В теле сообщения есть границы текста, которые должны быть включены в данные изображения.Я знаю, что запрос работает, потому что я могу отправить тот же запрос с использованием C # или Java и получить результаты.Я пробовал base64encode данных изображения и просто считывал файл в массив Post.
# include libs
require 'net/https'
require 'uri'
require 'json'
require 'base64'
accessKey = "Access_Key_String"
uri = "https://api.cognitive.microsoft.com"
path = "/bing/v7.0/images/visualsearch"
batchNumber = "097ad727-862d-4720-93c4-08f7038cea7c"
fileName = "ElectricBike.jpg"
if accessKey.length != 32 then
puts "Invalid Bing Search API subscription key!"
puts "Please paste yours into the source code."
abort
end
def BuildFormDataStart(batNum, fileName)
startBoundary = "--batch_" + batNum
return startBoundary + "\r\n" + "Content-Disposition: form-data;
name=\"image\"; filename=" + "\"" + fileName + "\"" + "\r\n\r\n"
end
def BuildFormDataEnd(batNum)
return "\r\n\r\n" + "--batch_" + batNum + "--" + "\r\n"
end
# Construct the endpoint uri.
uri = URI(uri + path)
# Load the parts of the post body into an array.
post_body = []
# Add the file Data
post_body << BuildFormDataStart(batchNumber, fileName)
post_body << File.read(fileName) #Base64.encode64(File.read(fileName))
post_body << BuildFormDataEnd(batchNumber)
# Create the HTTP objects
header = {'Ocp-Apim-Subscription-Key': accessKey}
# Create the request.
request = Net::HTTP::Post.new(uri, 'knowledgeRequest' => "KnowledgeRequest")
request['Ocp-Apim-Subscription-Key'] = accessKey
request.content_type = "multipart/form-data; boundary=batch_" + batchNumber
request.body = post_body.join
# Send the request and get the response.
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
http.request(request)
end
puts "\nRelevant Headers:\n\n"
response.each_header do |key, value|
# Header names are lower-cased.
if key.start_with?("bingapis-") or key.start_with?("x-msedge-") then
puts key + ": " + value
end
end
puts "\nJSON Response:\n\n"
puts JSON::pretty_generate(JSON(response.body))
Результат Ruby пуст, но пример C # онлайн работает:
https://docs.microsoft.com/en-us/azure/cognitive-services/bing-visual-search/quickstarts/csharp
"tags": [
{
"displayName": "",
"actions": [
{
"actionType": "MoreSizes"
},
{
"actionType": "ImageById"
}
]
}
],
"image": {
"imageInsightsToken": ""
}