2014-07-04 8 views
2

lua에 문제가 있습니다.보내기 lua로 웹 사이트에 접속

GET으로 웹 사이트에 요청을 보내고 웹 사이트에서 응답을 받아야합니다.

ATM을 내가 모두는 이것이다 :

local LuaSocket = require("socket") 
client = LuaSocket.connect("example.com", 80) 
client:send("GET /login.php?login=admin&pass=admin HTTP/1.0\r\n\r\n") 
while true do 
    s, status, partial = client:receive('*a') 
    print(s or partial) 
    if status == "closed" then 
    break 
    end 
end 
client:close() 

전 서버의 응답을 얻기 위해 어떻게해야합니까?

이 웹 사이트에 정보를 보내고 결과를 얻고 싶습니다.

아이디어가 있으십니까?

+0

을 통과하는 문제를 해결'반환? nil을 인쇄하면 연결이 설정되지 않습니다. 그렇지 않으면's'는 서버의 응답을 포함합니다 (헤더 정보 포함). – hjpotter92

답변

0

안녕 얘들 아 내가`인쇄 (들 또는 부분) 무엇 헤더

local LuaSocket = require("socket") 
client = LuaSocket.connect("example.com", 80) 
client:send("GET /login.php?login=admin&pass=admin HTTP/1.0\r\nHost: example.com\r\n\r\n") 
while true do 
    s, status, partial = client:receive('*a') 
    print(s or partial) 
    if status == "closed" then 
    break 
    end 
end 
client:close() 
0

연결이 닫힐 때까지 *a이 읽히기 때문에이 기능이 작동하지 않지만이 경우 클라이언트는 읽어야 할 내용을 모릅니다. 당신이해야 할 일은 한 행씩 읽고 Content-Length를 찾기 위해 헤더를 파싱 한 다음 두 줄 끝을 본 후 지정된 바이트 수를 읽는 것입니다 (Content-Length에 설정된대로).

헤더를 읽고 구문 분석하고 리디렉션을 처리하고 100을 계속 수행하는 대신 모두 socket.http이 모든 복잡성을 처리 할 것입니다. 이런 식으로 뭔가를 시도 :

local http = require("socket.http") 
local body, code, headers, status = http.request("https://www.google.com") 
print(code, status, #body)