curl/wget не разрешает URL так же, как браузер при перенаправлении
Как получить правильный перенаправленный URL с помощью curl/wget?
Целевой URL:
- https://www.codeaurora.org/gitweb/quic/la/?p=kernel/msm-3.18.git;a=commit;h=430f3805c82634a3cb969d83acc4fc4c0ee6af27
- Вам нужно сбежать
;
(точка с запятой) в%3B
при прохождении curl / wget
Браузер, такой как Chrome/FireFox, преобразует указанный выше целевой URL в следующий URL, который включает commit
и это ожидаемый результат.
Однако, как curl, так и wget разрешают целевой URL на следующий URL, который включает tree
и это НЕ ожидаемое поведение.
Задержка перенаправленного URL в том числе commit
или же tree
и это может быть проблема с gitweb вместо curl / wget. Как получить правильный перенаправленный URL с помощью curl/wget? Сменить User-Agent бесполезно. Есть идеи? Моя команда curl выглядит следующим образом:
$ curl -v -L -o output.html \
https://www.codeaurora.org/gitweb/quic/la/?p=kernel/msm-3.18.git%3Ba=commit%3Bh=430f3805c82634a3cb969d83acc4fc4c0ee6af27
1 ответ
Я обнаружил, что проблема заключается в том, что вам нужно URL кодировать /
это часть названия проекта. Кодирование ;
с %3B
сломал вещи для меня.
Кроме того, потому что URL содержит ;
, вы должны заключить его в кавычки, так как это разделитель команд.
В строке запроса p=kernel/msm-3.18
должно быть p=kernel%2fmsm-3.18
Мне удалось заставить работать следующие две команды cURL:
curl -v -L -o output.html \
'https://www.codeaurora.org/gitweb/quic/la/?p=kernel%2fmsm-3.18.git;a=commit;h=430f3805c82634a3cb969d83acc4fc4c0ee6af27'
Или просто
curl -v -L -o output.html \
'https://www.codeaurora.org/gitweb/quic/la/?p=kernel/msm-3.18.git;a=commit;h=430f3805c82634a3cb969d83acc4fc4c0ee6af27'
Это может быть связано с тем, что программа считывает необработанные параметры и не декодирует%3B и ожидает точку с запятой в строке запроса.
Надеюсь, это поможет!