

下記のcurlの内容をrubyで実現しようとしているのですが  
400エラーなどが出てうまくいきません。

`curl -F grant_type=refresh_token -F refresh_token=<refresh token>
client_id=<client id> -F client_secret=<client secret> -X POST
https://test/token`

rubyでcurlの-Fオプションを実装する場合どのように記述すればよろしいのでしょうか?  
お手数ですが、回答の程よろしくお願い致します。

2018/04/18追記  
cubick様、nekketsuuu様

コメントありがとうございます。  
申し訳ございません、実装してみたコードやエラーなどを記載しておらず、  
質問の内容がよくありませんでした。

下記にコードとエラーを記載させていただきます。

■コード

[code]

    def updateAccessToken()
        json = ''
        uri = URI.parse("http://test/token")
        Net::HTTP.start(uri.host, uri.port){|http|
          request = Net::HTTP::Post.new(uri.path)
          request.set_form_data('grant_type' => 'refresh_token')
          request.set_form_data('refresh_token' => 'dfafdasfdasdfadsfsa3')
          request.set_form_data('client_id' => '2121fdasgadsraea')
          request.set_form_data('client_secret' => '2121fdasgadsraea')
          json = http.request(request)
        }
        return json
    end
    
[/code]

■エラー

[code]

    Net::HTTPBadRequest 400 Bad Request readbody=true
    
[/code]

kunif様

コメントありがとうございます。  
紹介していただいたサイトも試してみましたが上に記載したエラー内容が出てしまい、  
同じ結果でした。

2018/04/23追記  
kunif様

コメントありがとうございます。  
紹介していただいたリンク先の方法で調査を行ってみようかと思います。  
何度も対応していただきありがとうございました。


CC BY-SA 3.0
2018-04-17T11:35:17.397
43329
2018-04-23T01:25:31.673
2018-04-23T01:25:31.673
26782
26782
question
ruby curl
curlコマンドのrubyで実装について


`400 Bad Request` が出るということはリクエスト内容がサーバーの期待するものではないということだと思います。

curl の -F は `Content-Type: multipart/form-data` のリクエストを発行しますが、Ruby の
`Net::HTTP::Post` は `Content-Type: application/x-www-form-urlencoded`
のリクエストを発行するので、そのせいかもしれません。

Ruby で `Content-Type: multipart/form-data` リクエストを発行したい場合は、`set_form_data` ではなく
`set_form` を使用するのが良いと思います。

次のページが参考になると思います。  
<http://masamitsu-murase.blogspot.jp/2017/01/ruby-nethttp-multipart-post.html>


CC BY-SA 3.0
2018-04-18T03:52:43.027
43344
2018-04-18T03:52:43.027
3249
43329
answer