2016-05-31 148 views
1

我使用LuaForWindows(最新版本),我已閱讀thisthis答案以及我在lua-users.org的mailinglist中找到的所有內容。我試過的(大多數)站點只能用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。)

如果我使用URLopenConnection()編寫等效下載器,它不會重定向。

我已經嘗試了手動重定向(設置refferer和東西)和使用the 'generic' way。正如其他答案中提到的大多數提示。

回答

1

您正在使用socket.http,但嘗試訪問https URL。 luasocket不處理HTTPS協議,因此它會向默認端口80發送請求,並重定向到HTTPS鏈接(相同的鏈接)。這是多次的(因爲這個URL並沒有真正改變),最後luasocket放棄了這個信息。

解決方案是install luasec並使用ssl.https模塊來執行請求。

+0

謝謝!由於我測試過的東西都很老,我總是測試http。現在每一件事都是https(或轉換爲),那些整齊地隱藏起來的東西很容易被忽略......就像建議中http末尾的s一樣。我也應該指出:http://stackoverflow.com/questions/10306489和http://stackoverflow.com/questions/10360632 – tDwtp

相關問題