web-socket

Страницы: 1
RSS
web-socket, Не качает, зараза. Помогите разобраться
 
Для анализа нужно скачать кучу файлов с котировками. Делать это вручную нет никакого желания.
Генерить ссылки для скачивания с Финама научился:
http://export.finam.ru/ABRD_180825_180908.txt?market=1&em=82460&code=ABRD&ap...
В хроме успешно качает, то есть сцылко рабочее.

Пытаюсь скомпилить следующий код:

local socket = require("socket")
host = "http:\\export.finam.ru/ABRD_180825_180908.txt?market=1&em=82460&code=ABRD&apply=0&df=25&mf=7&yf=2018&from=25.08.2018&dt=08&mt=8&yt=2018&to=08.09.2018&p=1&f=ABRD_180825_180908&e=.txt&cn=ABRD&dtf=4&tmf=3&MSOR=1&mstime=on&mstimever=1&sep=4&sep2=1&datf=10&at=1"
file = "ABRD_180825_180908.txt"

local c = assert(socket.connect(host, 80))
print©

c:send("GET " .. file .. " HTTP/1.0\r\n\r\n")

print("s \t status \t partial")
io.output("quotes1.dwn")
while true do
local s, status, partial = c:receive(2^10)
print(s, status, partial)
io.write(s or partial)
if status == "closed" then break end
end

Получаю ошибку: lua: trySocket.lua:5: Valid name, no data record of requested type

Подскажите, знающие люди, я неверно вбиваю host, file, нужно правильно отформатировать путь или в чем-то еще?
Пробовал форматировать путем string.format("%q", host).
 
Что видно беглым взглядом:
1) после http: два прямых слэша, а не обратных
2) в GET заголовок Host: обязателен
3) финам не любит автоматизаторов, может потребоваться весьма правдоподобно притворяться браузером.
 
Цитата
Anton написал:
Что видно беглым взглядом:
1) после http: два прямых слэша, а не обратных
2) в GET заголовок Host: обязателен
3) финам не любит автоматизаторов, может потребоваться весьма правдоподобно притворяться браузером.
Спасибо за ответ.
1) исправление слэшей проблему не решило
2) Получаю ошибку в строке "local c = assert(socket.connect(host, 80))"
То есть до GET дело не доходит. Нет коннекта к серверу
 
Цитата
Сергей написал:
Нет коннекта к серверу
А стоп, вы ж голый сокет используете. Тогда там посложней процедура, коннектиться надо к export.finam.ru без http:// в начале и без пути в конце, а в GET посылать путь (то что после после export.finam.ru).
 
Цитата
Anton написал:
Цитата
Сергей написал:
Нет коннекта к серверу
А стоп, вы ж голый сокет используете. Тогда там посложней процедура, коннектиться надо к export.finam.ru без http:// в начале и без пути в конце, а в GET посылать путь (то что после после export.finam.ru).
Спасибо. Теперь коннектится.
Но не качает:

>lua -e "io.stdout:setvbuf 'no'" "trySocket.lua"
tcp{client}: 023A8C80
s status partial
nil closed
>Exit code: 0

На первом же проходе цикла while получаю статус "Closed" и вылетаю
 
В GET пробовал со слэшем и без него отправлять. Как правильно будет?
 
Со слэшем вроде правильнее, насколько память мне не врет. А вообще если задача именно скачать, а не потренироваться, лучше перейти на socket.http, как пойдут данные это будет только начало, там начнутся редиректы, куки, чанкед контент и все такое, что на форуме толком не обсудить все равно.
 
Мне нужно скачать для дальнейшего анализа. Свежие файлы докачиваться будут регулярно.
Мне не принципиально. Если есть лучший способ, то расскажите. Если можно, с примерами или ссылками.

socket.http - Где про это почитать?
 
Ссылку пожалуйста, примеры там вроде тоже есть http://w3.impa.br/~diego/software/luasocket/http.html
 
Спасибо большое!
Ушел в изучение  
Страницы: 1
Читают тему
Наверх