2016-05-31 10 views
1

Я использую LuaForWindows (последняя версия), и я прочитал this и this ответ и все, что я мог найти в mailinglist lua-users.org. То, что я пытаюсь (большинство) сайтов, отвечает только с 301 или 302. Я создал примерный пакетный скрипт, который загружает (некоторые) из OpenGL 2.1 Reference со своих справочных страниц.luaSocket HTTP-запросы всегда отвечают на перенаправление (301 или 302)

@ECHO OFF 

FOR /F "SKIP=5" %%# IN (%~fs0) DO lua -l socket.http -e "print(socket.http.request('https://www.opengl.org/sdk/docs/man2/xhtml/%%#.xml'))" 
GOTO:EOF 

glAccum 
glActiveTexture 
glAlphaFunc 
glAreTexturesResident 
glArrayElement 
glAttachShader 
glBegin 
glBeginQuery 
glBindAttribLocation 
glBindBuffer 

самая важная часть заключается в следующем:

print(require('socket.http').request('https://www.opengl.org/sdk/docs/man2/xhtml/glAccum.xml')) -- added glAccum so you can run it 

Это всегда возвращает 301. Это также происходит со мной, когда загрузка с других случайных страниц. (Я не замечаю их, поэтому я не могу дать список, но я случайно узнал, что некоторые из них используют cloudflare.)

Если я напишу эквивалентный загрузчик в Java, используя URL и openConnection(), он не будет перенаправлен.

Я уже пробовал переадресацию вручную (настройка refferer и прочее) и используя the 'generic' way. Как и большинство советов, изложенных в других ответах.

ответ

1

Вы используете socket.http, но попытайтесь получить доступ к адресу https. luasocket не обрабатывает протокол HTTPS, поэтому он отправляет запрос на порт по умолчанию 80 и получает перенаправление на HTTPS-ссылку (та же ссылка); это происходит несколько раз (поскольку URL-адрес действительно не изменяется), и в конце luasocket отказывается от создания сообщения.

Решение должно быть install luasec и использовать модуль ssl.https для выполнения запроса.

+0

Спасибо! Поскольку те вещи, которые я тестировал, были довольно старыми, я всегда тестировал http. В настоящее время каждыйTHTH является https (или конвертируется в), и те аккуратно скрытые вещи легко пропустить ... например, в конце http в предложениях. Я также должен указать: http://stackoverflow.com/questions/10306489 И http://stackoverflow.com/questions/10360632 – tDwtp