BacCM
@BacCM
C++ почти с рождения

Как написать запрос на lua к REST API?

Решил было набросать скрипт на lua для запросов к redmine серверу и не разобрался как работают функции пакетов socket и socket.http.

c = socket.connect("local.redmine", 80)

возвращает nil
strUrl = " /issues.xml"
strUrl = strUrl.."?key="..apiAccessKey
strUrl = strUrl.."&assigned_to_id=me"
strUrl = strUrl.."&status_id=2"
strUrl = strUrl.."&limit=100"
strUrl = strUrl.."\r\n\r\n"
res, c, cache = http.request("local.redmine", "GET", strUrl)

в res вычитывает html код главной страницы сайта

какие-то такие вариации пробовал

local headers = {}

headers["Content-Type"] = "application/json"
headers["X-Parse-Application-Id"] = "LuaTest"
headers["X-Redmine-API-Key"] = apiAccessKey

local body = ""
local params = {}
params.headers = headers
params.body = body
res, c, cache = http.request("local.redmine", "GET", networkListener, params)


На C++ это выглядело так, и вполне себе работало
SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	struct hostent *host;
	host = gethostbyname("local.redmine");
	SOCKADDR_IN SockAddr;
	SockAddr.sin_port=htons(80);
	SockAddr.sin_family=AF_INET;
	SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
	connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr));

	string strUrl = "GET /issues.xml";
	strUrl += "?key=" + apiAccessKey;
	strUrl += "&assigned_to_id=me";
	strUrl += "&status_id=2";
	strUrl += "&limit=100";
	strUrl += "\r\n\r\n";
	
	send(Socket, strUrl.c_str(), strUrl.length(), 0);
	char buffer[10001];
	int nDataLength;
	while ((nDataLength = recv(Socket,buffer, 10000,0)) > 0){
		buffer[nDataLength] = 0;
		m_strOut += buffer;
		strXmlAnswer += buffer;
	}
	closesocket(Socket);
  • Вопрос задан
  • 2149 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kiriharu
Python backend, Linux enjoyer
В socket вроде как есть http, поэтому можно следующим образом:

local http = require("socket.http")

local body, code, headers, status = http.request("http://example.com/lua.php")

if body then
   -- если есть ответ - пишем его
    print(body)
else 
    -- если нет - скорее всего произошла какая-то ошибка. Выводим код ошибки.
    print(code)
end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы