curlでのHTTP post を ruby に書き換えで失敗する
DropboxにAPI2を使いファイルのアップロードをしたいので下記のcurl
コマンドでファイルが正常にアップロードされるのを確認しました。
curl -X POST https://content.dropboxapi.com/2/files/upload \
--header "Authorization: Bearer $access_token" \
--header "Content-Type: application/octet-stream" \
--header "Dropbox-API-Arg: {\"path\": \"test.txt\", \"mode\": \"overwrite\"}" \
--data-binary @foo.txt
これをRubyのコードにおき変えるために
access_token = ENV['DROPBOX_ACCESS_TOKEN']
uri = URI.parse('https://content.dropboxapi.com')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new("2/files/upload")
request.add_field('Authorization', "Bearer #{access_token}")
request.add_field('Content-Type', 'application/octet-stream')
request.add_field('Dropbox-API-Arg', {path: '/test.txt', mode: 'overwrite'})
request.body = File.read('foo.txt')
http.request(request)
としたのですが #<Net::HTTPBadRequest 400 Bad Request readbody=true>
になってしまいました。
400
エラーだけでは原因をどのように特定していけばよいのかわからないのですが、このような場合どのようにエラーを取り除けば良いのでしょうか?