所以我试图从我的api获得一个json响应,然后根据响应返回true或false,但我不能绕过它。任何帮助表示赞赏。
编辑: 我发送到该页面的查询是:https://de2or.com/api.php?login=test123&password=test123&hwid=12345 - 如果需要,您可以自己查看。
然后我收到的是: { “错误”:是的, “message”:“用户名或密码无效”, “data”:null, “status_code”: - 1 }
我想创建一个bool函数,如果得到它则返回false,否则只返回true。
我当前的代码,我认为没有正确处理json:
net::requests m_request(L"de2or-auth", false);
std::wstring answer = m_request.Post(false, URL, "login=%s&password=%s& hwid=%s", username.c_str(), password.c_str(), (sw::sha512::calculate(hwid)).c_str());
if (answer == L"Try Again") {
answer = m_request.Post(false, URL, "login=%s&password=%s&hwid=%s", username.c_str(), password.c_str(), (sw::sha512::calculate(hwid)).c_str());
}
return answer != L"You have successfully login" ? false : true;
答案 0 :(得分:1)
好像你在普通字符串中存储json响应。你试过任何json解析库吗? Rapid-json看起来很不错。
从它的documentation开始,你似乎可以这样做:
#include "rapidjson/document.h"
using namespace rapidjson;
// Your code to get answer here
GenericDocument<UTF16<> > document;
document.Parse(answer);
std::wstring msg(document["message"].GetString());
return msg == L"You have successfully login";
我假设您使用的是UTF-16编码。我没有尝试过代码,因此有可能事情进展不顺利。如果是这样,请评论我。
PS)您可以更具体,例如提供您正在使用的库(什么是net::requests
?),您正在使用的编码,或者我们可以重现的自包含示例。
编辑以上代码不起作用。以下示例工作正常。
#include "include/rapidjson/document.h"
#include <iostream>
using namespace rapidjson;
int main(void)
{
std::wstring answer = L" { \"error\": true, \"message\": \"Invalid username or password\", \"data\": null, \"status_code\": -1 }";
GenericDocument<UTF16<> > document;
const wchar_t *newanswer = answer.c_str();
document.Parse(newanswer);
std::wstring msg(document[L"message"].GetString());
std::wcout << msg << std::endl;
return 0;
}
我忘了向L
添加"message"
前缀。此外,Rapid-json不支持将std :: basic_string放入其Parse
方法中。文档有点乱......