我想从Ruby on Rails应用程序中删除YouTube上的视频。我下面这些说明,从the YouTube API docs:YouTube API:从Ruby中删除视频HTTP请求不起作用
DELETE /feeds/api/users/default/uploads/VIDEO_ID HTTP/1.1
Host: gdata.youtube.com
Content-Type: application/atom+xml
Authorization: Bearer ACCESS_TOKEN
GData-Version: 2
X-GData-Key: key=DEVELOPER_KEY
我不是很熟悉Ruby的Net::HTTP
类,但似乎无论什么我尝试我不能得到正常工作的要求。我仔细查看了许多其他关于从YouTube上删除视频的StackOverflow问题,但没有找到解决这个问题的方法。我的代码如下,我已经替换了用户名,视频ID,访问令牌和开发人员密钥。
url = URI.parse("https://gdata.youtube.com/feeds/api/users/[USER_NAME]/uploads/[VIDEO_ID]")
post_args = { 'Host' => 'gdata.youtube.com', 'GData-Version' => '2', 'Content-Type' => 'application/atom+xml', 'Authorization' => "Bearer [ACCESS_TOKEN]", 'X-GData-Key' => 'key=[DEVELOPER_KEY]' }
req = Net::HTTP::Delete.new(url.path)
req.set_form_data(post_args)
httpreq = Net::HTTP.new(url.host, url.port)
httpreq.use_ssl = true
resp = httpreq.start {|http| http.request(req) }
检查响应,我收到来自YouTube的错误400(错误请求)。答复只是说“您的客户发布了格式不正确或非法的请求,这就是我们所知道的”。
请求我有什么问题吗?我一次又一次地对照模板检查过,我看不出有什么问题。我知道我的访问令牌和开发人员密钥正在工作,因为我可以提出其他请求,例如视频上传。
我打印从HTTP请求的调试输出,而据我可以告诉它看起来不错:
<- "DELETE /feeds/api/users/[USER_NAME]/uploads/[VIDEO_ID] HTTP/1.1\r\nAccept: */*\r\nUser-Agent: Ruby\r\nContent-Type: application/x-www-form-urlencoded\r\nHost: gdata.youtube.com\r\nContent-Length: 275\r\n\r\n"
<- "Host=gdata.youtube.com&GData-Version=2&Content-Type=application%2Fatom%2Bxml&Authorization=Bearer+[ACCESS_TOKEN]&X-GData-Key=key%3D[DEVELOPER_KEY]"
我可以看到作为一个可能的问题,唯一的办法就是,在的第一线请求,“Content-Type”被设置为“application/x-www-form-urlencoded”。再次,不是HTTP请求的专家我不确定第一行中的Content-Type集合与我明确设置为“application/atom + xml”的Content-Type之间的区别是什么请求的行。一些挖后,虽然,我发现了set_form_data
方法自动将内容类型设置为“应用程序/ x-WWW的形式,进行了urlencoded”,所以我尝试添加下面一行到我的代码:
req.content_type = 'application/atom+xml'
权行后
req.set_form_data(post_args)
当我这样做,我确实看到在请求相应的变化:
<- "DELETE /feeds/api/users/[USER_ID]/uploads/[VIDEO_ID] HTTP/1.1\r\nAccept: */*\r\nUser-Agent: Ruby\r\nContent-Type: application/atom+xml\r\nHost: gdata.youtube.com\r\nContent-Length: 275\r\n\r\n"
<- "Host=gdata.youtube.com&GData-Version=2&Content-Type=application%2Fatom%2Bxml&Authorization=Bearer+[ACCESS_TOKEN]&X-GData-Key=key%3D[DEVELOPER_KEY]"
但是,我仍然得到来自YouTube完全相同的响应。错误400,错误的请求。这里发生了什么?