Получить размер файла с помощью Curl, когда HEAD возвращает 403, но GET равен 200? - PullRequest
0 голосов
/ 25 марта 2020

Во-первых, это не дубликат уже заданных вопросов о простом получении размера файла с помощью запроса заголовков. https://unix.stackexchange.com/questions/450402/how-to-retrieve-downloadable-file-size-with-curl-command Et c.

Я фактически начал с чтения их, когда мне было необходимо получить размер удаленного файла, и определил, что запуск curl выполняется с помощью -I / - голова должна дать мне Content-Length: что я могу использовать. Вместо этого для меня это дает мне ошибку 403.

# not posting full curl command for sake of privacy and NSFW link
# but it was derived from firefox's copy as curl command result
curl -I 'https://somedomain.xyz/files/video.mp4' -H 'User-Agent: Mozilla/5.0' -H 'Referer: xyz' -H 'Cookie: __cfduid=xyz' 

HTTP/1.1 403 Forbidden
Date: Wed, 25 Mar 2020 17:41:31 GMT
Content-Type: text/html;charset=iso-8859-1
Connection: keep-alive
Cache-Control: must-revalidate,no-cache,no-store
Cf-Railgun: direct (starting new WAN connection)
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: xyz-YUL

Здесь предложите его из-за отсутствия cookie / реферера https://unix.stackexchange.com/questions/139698/why-would-curl-and-wget-result-in-a-403-forbidden Я перепробовал все, что было в списке, и без разницы. Все еще 403.

Здесь можно предположить, что администратор сайта может заблокировать его На запрос HEAD поступает сообщение "403 запрещено", в то время как GET "200 в порядке"?

Что странно для меня что, если я пытаюсь загрузить файл, curl мгновенно сообщает о размере в итоговом столбце, хотя и в удобочитаемой форме.

curl 'https://somedomain.xyz/files/video.mp4' -H 'User-Agent: Mozilla/5.0' -H 'Referer: xyz' -H 'Cookie: __cfduid=xyz' 

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                               Dload  Upload   Total   Spent    Left  Speed
0  384M    0 3148k    0     0  1594k      0  0:04:07  0:00:01  0:04:06 1594k

Как curl достигает этого и могу ли я использовать его для получения размера вместо запроса заголовка? Кроме того, есть ли способ, чтобы я просто получить запрос заголовка для работы?

Спасибо!

1 Ответ

0 голосов
/ 27 марта 2020

Решением было использование curl -X GET -I с URL и файлами cookie. Реферер и пользовательский агент не нужны.

Для сравнения

Запрос заголовка curl -I 'https://somedomain.xyz/files/video.mp4' -H 'Cookie: __cfduid=xyz'

HTTP/1.1 403 Forbidden
Date: Fri, 27 Mar 2020 17:44:52 GMT
Content-Type: text/html;charset=iso-8859-1
Connection: keep-alive
Cache-Control: must-revalidate,no-cache,no-store
Cf-Railgun: direct (starting new WAN connection)
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: XYZ-YUL

Запрос заголовка GET curl -X GET -I 'https://somedomain.xyz/files/video.mp4' -H 'Cookie: __cfduid=xyz'

HTTP/1.1 200 OK
Date: Fri, 27 Mar 2020 17:45:14 GMT
Content-Type: video/mp4
Content-Length: 9895038
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: public, max-age=31536000
Cf-Railgun: direct (waiting for pending WAN connection)
Expires: Tue, 31 Dec 2030 23:30:45 GMT
Last-Modified: Wed, 04 Mar 2020 16:52:51 CET
X-Ua-Compatible: IE=edge,chrome=1
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: XYZ-YUL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...