Ruby on Rails 애플리케이션에서 YouTube의 비디오를 삭제하려고합니다.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
내가 루비의 Net::HTTP
클래스에 익숙하지 않다, 그러나 그것은 보인다 내가 제대로 작동하려면 요청을받을 수 없습니다 시도 상관없이 : 나는 the YouTube API docs에서이 지침을, 다음입니다. 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
방법은 자동으로 "을 application/x-www-form은-를 urlencoded"로 콘텐츠 형식을 설정하는 것을 발견, 그래서 난 내 코드에 다음 줄을 추가하는 시도 :
req.content_type = 'application/atom+xml'
못했습니다
<- "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]"
그러나, 나는 여전히 유튜브에서 동일한 응답을 얻을 : 나는이 작업을 수행 할 때 줄 뒤에
req.set_form_data(post_args)
, 나는 요청에 상응하는 변화를 볼 수 있습니까 . 오류 400, 잘못된 요청입니다. 도대체 무슨 일이 벌어지고 있니?