我正在尝试使用ruby来发送使用vimeo api编辑视频的补丁请求。请求成功但vimeo无法读取我的有效负载(标题和描述),即标题和描述没有被更改。我使用过HTTParty,RestClient以及Net :: HTTP但它们都不起作用。以下是我实施的用于发送补丁请求的代码,
RESTClient实现
payload = {"description" => "Test Description", "name" => "Test Video"}
res = RestClient.patch(
vimeo_edit_url,
payload.to_s,
{ "Authorization" => auth })
NET :: HTTP
options = {'description' => "Test Description", 'name' => "Test Video"}
edit_req = Net::HTTP::Patch.new(vimeo_edit_url, initheader = { "Authorization" => auth})
edit_req.data = options.to_s
edit_uri = URI(vimeo_edit_url)
edit_http = Net::HTTP.new(edit_uri.host, edit_uri.port)
edit_http.use_ssl = true
edit_http.verify_mode = OpenSSL::SSL::VERIFY_PEER
edit_response = edit_http.request(edit_req)
通常情况下,响应将是200 OK以及更新的视频详细信息,但我收到200 OK的视频详细信息(标题和说明未被更改)。就好像vimeo无法读取我的有效载荷一样。
答案 0 :(得分:0)
您可能希望传递payload
,而不是payload.to_s
。
.to_s
正在将你精心安排的哈希变成一个奇怪的rubyified字符串,你提到的所有HTTP库都会接受一个哈希并为你处理转换。
以下是irb
会话中的一些不同表示形式:
>> payload = {"description" => "Test Description", "name" => "Test Video"}
>> payload
=> {"description"=>"Test Description", "name"=>"Test Video"}
>> payload.to_s
=> "{"description"=>"Test Description", "name"=>"Test Video"}"
>> require 'json'
=> true
>> payload.to_json
=> "{"description":"Test Description","name":"Test Video"}"