我想從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,錯誤的請求。這裏發生了什麼?