Я пытаюсь загрузить видео в API YouTube через cURL. Это мой код:
curl -v -X PUT '#{upload_uri}' -H 'Authorization: Bearer #{@test_token}' -H 'Content-Length: #{File.size(@video).to_s}' -H 'Content-Type: video/*' -d @'#{@video}'
Полученный ответ:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 216.58.196.170...
* TCP_NODELAY set
* Connected to www.googleapis.com (216.58.196.170) port 443 (#0)
---
---
* Using Stream ID: 1 (easy handle 0x7f9570000400)
> PUT /upload/youtube/v3/videos?part=snippet,status,contentDetails&uploadType=resumable&upload_id=<id> HTTP/2
> Host: www.googleapis.com
> User-Agent: curl/7.54.0
> Accept: */*
> Authorization: Bearer <token>
> Content-Length: 140926828
> Content-Type: video/*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
} [16384 bytes data]
97 65.3M 0 0 97 64.0M 0 3704k 0:00:18 0:00:17 0:00:01 4226k* We are completely uploaded and fine
< HTTP/2 400
< content-type: text/html; charset=UTF-8
< referrer-policy: no-referrer
< content-length: 1555
< date: Wed, 04 Mar 2020 09:21:34 GMT
<
* HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)
99 65.3M 0 0 100 65.3M 0 3714k 0:00:18 0:00:18 --:--:-- 4242k
* Closing connection 0
* TLSv1.2 (OUT), TLS alert, Client hello (1):
} [2 bytes data]
curl: (92) HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)
Я понимаю, что это связано с неправильными значениями Content-Length
. Однако значение этого заголовка соответствует размеру файла, отправляемого в двоичном виде.
Чем вызвана эта ошибка в cURL?
Этот запрос прекрасно работает с почтальоном, с той же Content-Length
, предоставленной здесь.