Я использую внешний API, которому я отправляю JSON.
Когда я копирую тот же JSON в Paw (инструмент, похожий на почтальон), он работает.
С рельсами я получаю ошибку 400 bad request
.
Я думаю, что этопроблема кодирования, потому что, когда я хочу проанализировать тело ответа 400, мне нужно сделать
response.body.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?')
Тогда запрос и ответ:
Запрос
{"searchable":{"default":true},"c_body":{"ja-JP":{"_type":"markup_text","source":"<div class=\"cms-content-wrapper\"><div class=\"cms-page-module\" data-template-id=\"552100319\" data-template-name=\"PEP_Features_Carousel\" data-page-module-id=\"408407719\" rank=\"cptiuz\"><section class=\"sk-component sk-component--pep-feature-slider\" data-slider-id=\"\" id=\"\">\r\n <div class=\"sk-carousel sk-carousel__emotional sk-carousel-load\" data-sk-carousel-limit=\"{'large':1, 'medium':1, 'small':1}\" data-loop=\"true\">\r\n\t<div class=\"sk-carousel-inner\">\r\n\t\t<ul class=\"sk-carousel-wrapper\" style=\"left: -100%; transform:none;\">\r\n \r\n \r\n \r\n <li>\r\n <div class=\"sk-carousel__item\" data-gallery-item=\"\">\r\n <div class=\"sk-copy--text-wrapper\">\r\n <div class=\"sk-copy--text\">\r\n <div class=\"sk-pre-header\"><p>ストッケ エクスプローリーの主な特徴</p>\n</div>\r\n <h3>より近くで絆を感じる</h3>\r\n \r\n <div class=\"sk-copy--large\">公園からコーヒーショップまで、エクスプローリーはお子さまと親御さまの絆を感じられる、最適な高さにお子さまの位置を調節します。</div>\r\n \r\n <div .........
Тело ответа
{"_v":"19.5","fault":{"arguments":{"body":"{\"searchable\":{\"default\":true},\"c_body\":{\"ja-JP\":{\"_type\":\"markup_text\",\"source\":\"<div class=\\\"cms-content-wrapper\\\"><div class=\\\"cms-page-module\\\" data-template-id=\\\"552100319\\\" data-template-name=\\\"PEP_Features_Carousel\\\" data-page-module-id=\\\"408407719\\\" rank=\\\"cptiuz\\\"><section class=\\\"sk-component sk-component--pep-feature-slider\\\" data-slider-id=\\\"\\\" id=\\\"\\\">\\r\\n <div class=\\\"sk-carousel sk-carousel__emotional sk-carousel-load\\\" data-sk-carousel-limit=\\\"{'large':1, 'medium':1, 'small':1}\\\" data-loop=\\\"true\\\">\\r\\n\\t<div class=\\\"sk-carousel-inner\\\">\\r\\n\\t\\t<ul class=\\\"sk-carousel-wrapper\\\" style=\\\"left: -100%; transform:none;\\\">\\r\\n \\r\\n \\r\\n \\r\\n <li>\\r\\n <div class=\\\"sk-carousel__item\\\" data-gallery-item=\\\"\\\">\\r\\n <div class=\\\"sk-copy--text-wrapper\\\">\\r\\n <div class=\\\"sk-copy--text\\\">\\r\\n <div class=\\\"sk-pre-header\\\"><p>???????????? ???????????????????????????????????????</p>\\n</div>\\r\\n <h3>?????????????????????
При прокрутке до ответа вправо в ответе появляется много ???где японский текст был.Вот почему я предполагаю, что это проблема кодирования.Но я не могу это исправить.
Вот мой код:
def patch_content(content_asset_document, content_asset_id, instance_url)
puts :patch_content
token = get_token
header = {
"Authorization" => "Bearer #{token.access_token}",
"Content-Type" => "application/json; charset=UTF-8"
}
url = "#{instance_url}/libraries/lib/content/#{content_asset_id}"
uri = URI.parse(url)
request = Net::HTTP::Patch.new(uri.request_uri, header)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1_2
request.body = content_asset_document.to_json.to_s
response = http.request(request)
File.open("request.txt", "w") { |file| file.puts request.body }
yield response.code.to_i, response
end