У меня есть программа, уже написанная на gawk, которая загружает множество небольших фрагментов информации из Интернета. (Медиа-сканер и индексатор)
В настоящее время для получения информации запускается wget. Это нормально, но я бы хотел просто повторно использовать соединение между вызовами. Возможно, запуск программы может сделать от 200 до 2000 вызовов одной и той же службы api.
Я только что обнаружил, что gawk может работать в сети, и нашел geturl Однако к совету внизу этой страницы прислушиваются, я не могу найти простой способ прочитать последнюю строку и оставить соединение открытым.
Поскольку я в основном читаю данные JSON, я могу установить RS = "}" и выйти, когда длина тела достигнет ожидаемой длины содержимого. Однако это может прерваться с любым конечным белым пространством. Мне нужен более надежный подход. Есть ли у кого-нибудь более приятный способ реализовать спорадические HTTP-запросы в awk, которые поддерживают соединение. На данный момент у меня такая структура ...
con="/inet/tcp/0/host/80";
send_http_request(con);
RS="\r\n";
read_headers();
# now read the body - but do not close the connection...
RS="}"; # for JSON
while ( con |& getline bytes ) {
body = body bytes RS;
if (length(body) >= content_length) break;
print length(body);
}
# Do not close con here - keep open
Жаль, что эта маленькая вещь, кажется, портит весь потенциал здесь. Также на случай, если кто-нибудь спросит :) ..
- Первоначально awk был выбран по историческим причинам - в то время на этой встроенной платформе было не так много других языков.
- Собрать все URL заранее и передать в wget будет непросто.
- повторная реализация в perl / python и т. д. не является быстрым решением.
- Я посмотрел на попытку передать URL-адреса в именованный канал и в wget -i -, это не сработает. Данные буферизуются, а unbuffer недоступен - также я думаю, что wget собирает все URL-адреса до EOF перед обработкой.
- Данных мало, поэтому отсутствие сжатия не является проблемой.
wget
часть? Я должен думать, что написать замену дляwget
, которая остается, считывает URL-адреса со стандартного ввода и записывает данные в стандартный вывод, было бы намного проще, чем пытаться встроить функциональность в сценарийgawk
. - person sarnold   schedule 06.04.2012