Команда для загрузки файла, отличного от Wget
-
13-09-2019 - |
Вопрос
Мой хост предоставляет ограниченный доступ к командам SSH и Linux.Однако я не могу использовать Wget хочешь верь, хочешь нет.
Я надеялся что-нибудь скачать файл (.flv) с другого сервера.Есть ли другая команда, которую я могу попробовать?
Если нет, я, вероятно, мог бы использовать Python, Perl или PHP (любимый) для загрузки файла.Является ли это возможным?
Решение
Вы можете использовать следующую команду:
curl -O http://www.domain.com/file.flv
Другие советы
echo -ne "GET /path/to/file HTTP/1.0\r\nHost: www.somesite.com\r\n\r\n" | nc www.somesite.com 80 | perl -pe 'BEGIN { while (<>) { last if $_ eq "\r\n"; } }'
Баш скомпилировано с --enable-net-redirections
довольно мощный.(Зш имеет схожие функции.) Черт возьми, я даже добавлю сюда HTTP Basic Auth.
Конечно, это не очень хороший клиент HTTP/1.1;например, он не поддерживает фрагментированное кодирование.Но на практике это довольно редко.
read_http() {
local url host path login port
url="${1#http://}"
host="${url%%/*}"
path="${url#${host}}"
login="${host%${host#*@}}"
host="${host#${login}@}"
port="${host#${host%:*}}"
host="${host%:${port}}"
(
exec 3<>"/dev/tcp/${host}/${port:-80}" || exit $?
>&3 echo -n "GET ${path:-/} HTTP/1.1"$'\r\n'
>&3 echo -n "Host: ${host}"$'\r\n'
[[ -n ${login} ]] &&
>&3 echo -n "Authorization: Basic $(uuencode <<<"${login}")"$'\r\n'
>&3 echo -n $'\r\n'
while read line <&3; do
line="${line%$'\r'}"
echo "${line}" >&2
[[ -z ${line} ]] && break
done
dd <&3
)
}
OTOH, если у тебя есть Perl ЛВП установлен, он должен поставляться с образцом двоичного файла с именем ПОЛУЧАТЬ…
lynx -source
curl -C - -O http://www.url.com
Python-скрипт:
#!/usr/bin/env python
import os,sys,urllib
f = open (os.path.basename (sys.argv[1]), 'w')
f.write (urllib.urlopen (sys.argv[1]).read ())
f.close ()
где sys.argv[1]
— это URL-адрес, который вас интересует.
Если вы пытаетесь загрузить файл с хоста, к которому у вас есть аутентифицированный доступ, попробуйте использовать scp
.Это похоже на обычное копирование, но делается через ssh-туннель.Я обнаружил, что хосты, которые разрешают «ограниченный ssh», часто по-прежнему разрешают scp
.
scp user@myhost.com:folder/file.flv ./
Вам нужно будет предоставить свои учетные данные пользователя.Видеть scp
документация Чтобы получить больше информации.
Еще один инструмент, который делает подобные вещи, — это ловить.
Используйте scp.
Применение:scp [-1246BCpqrv] [-c шифр] [-F ssh_config] [-i файл_идентификации]
[-l предел] [-o ssh_option] [-P порт] [-S программа]
[[пользователь@]хост1:]файл1 ...[[пользователь@]хост2:]файл2
Различные пути,
- Питон -- Как не получать данные по HTTP
- Перл -- Файл::Fetch модуль
- ТКЛ -- ::http::geturl, в конце есть пример
- Если у вас есть компилятор и FTP работает, получить wget и скомпилировать его
Другой возможной альтернативой является ария2.