我不完全确定我应该做什么来将数据POST到API(5sim.net)。我现在使用的是一个read回调,如下所示:
https://curl.se/libcurl/c/CURLOPT_WRITEFUNCTION.html
我的问题类似于Using libCurl and JsonCpp to parse from https webserver,但我需要先发送信息以获得响应。
当我没有为API的这一部分发送数据时,我已经在接受数据时使一切工作正常:
第一个
将数据添加到有效负载会导致请求失败。
我尝试使用的API的下一部分需要授权。下面是我所拥有的,但是当我发送它时,curl_easy_perform()
没有返回CURLE_OK
(第一个curl_easy_perform()
调用):
第一个
我只是需要一些指导,如何张贴数据,并得到一个响应,这是不工作。
我所要做的就是将带有JSON数据的POST
发送到一个API并获得响应,解析该响应,然后将其作为一个结构返回。
API文档链接
更新:这是我的代码现在,不幸的是它返回HTTP GET错误404,不确定是否有什么我应该修复...
FiveSimUserInformation Get5SimUserInformation(std::string APIKey)
{
std::string Url = "https://5sim.net/v1/user/profile/";
std::cout << colors::bright_yellow << "[!] " << colors::white << "Querying 5sim user balance information from " << Url << ".\n";
if (curl_global_init(CURL_GLOBAL_ALL) == CURLE_OK)
{
CURL* Curl = curl_easy_init();
std::string Request1 = R"("Authorization": "Bearer )" + APIKey + R"(")";
std::string Request2 = R"("application/json")";
curl_easy_setopt(Curl, CURLOPT_URL, Url.c_str());
curl_easy_setopt(Curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_easy_setopt(Curl, CURLOPT_TIMEOUT, 10);
curl_easy_setopt(Curl, CURLOPT_FOLLOWLOCATION, TRUE);
std::unique_ptr<std::string> HttpData(new std::string());
curl_easy_setopt(Curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(Curl, CURLOPT_WRITEDATA, HttpData.get());
LONG HttpCode(NULL);
curl_slist* List = nullptr;
List = curl_slist_append(List, Request1.c_str());
List = curl_slist_append(List, Request2.c_str());
curl_easy_setopt(Curl, CURLOPT_HTTPHEADER, List);
curl_easy_perform(Curl);
curl_easy_getinfo(Curl, CURLINFO_RESPONSE_CODE, &HttpCode);
curl_easy_cleanup(Curl);
if (HttpCode == 200)
{
std::cout << colors::bright_yellow << "[!] " << colors::white << "Data recived: \n" << *HttpData.get() << '\n';
std::cout << colors::bright_green << "[!] " << colors::bright_yellow << "HTTP GET attempt respose code: " << HttpCode << "\n";
Json::Value RecivedData;
Json::Reader Reader;
if (Reader.parse(*HttpData.get(), RecivedData))
{
std::cout << colors::bright_green << "[+] " << colors::white << "Successfully parsed JSON data.\n";
std::cout << colors::bright_yellow << "[!] " << colors::white << "5sim User information: \n" << RecivedData.toStyledString();
ULONG UserID(RecivedData["id"].asUInt64());
std::string UserEmail(RecivedData["email"].asString());
std::string UserVendor(RecivedData["vendor"].asString());
std::string UserDefaultForwardingNumber(RecivedData["default_forwarding_number"].asString());
LONGLONG UserBalance(RecivedData["balance"].asInt64());
LONG UserRating(RecivedData["rating"].asInt64());
Json::Value DefaultCountry;
Json::Value DefaultOperator;
if (Reader.parse(RecivedData["default_country"].toStyledString().c_str(), DefaultCountry))
{
std::string UserDefaultCountry = DefaultCountry["name"].asString();
std::string UserDefaultCountryISO = DefaultCountry["iso"].asString();
std::string UserDefaultCountryPrefix = DefaultCountry["prefix"].asString();
if (Reader.parse(RecivedData["default_operator"].toStyledString().c_str(), DefaultOperator))
{
std::string UserDeafultOperatorName = DefaultCountry["name"].asString();
ULONG UserFrozenBalance(RecivedData["frozen_balance"].asUInt64());
return { UserID, UserEmail, UserVendor, UserDefaultForwardingNumber, UserBalance, UserRating, UserDefaultCountry, UserDefaultCountryISO, UserDefaultCountryPrefix, UserDeafultOperatorName, UserFrozenBalance };
}
else
{
std::cout << colors::bright_red << "[-] " << colors::white << "Unable to parse data from \"default_operator\".\n";
}
}
else
{
std::cout << colors::bright_red << "[-] " << colors::white << "Unable to parse data from \"default_country\".\n";
}
}
else
{
std::cout << colors::bright_red << "[-] " << colors::white << "Unable to parse recived data from HTTP GET attempt.\n";
}
}
else if (HttpCode == 401)
{
std::cout << colors::bright_red << "[-] " << colors::white << "HTTP GET Code 401, Unauthorized. (#2)\n";
}
else
{
std::cout << colors::bright_red << "[-] " << colors::white << "HTTP GET Code wasn't 200 or 401 (acceptable values), unsuccessful HTTP GET attempt. Code: \n" << HttpCode;
}
}
return { 0 };
//Curl = nullptr;
}
1条答案
按热度按时间avkwfej41#
我 只是 需要 一些 如何 POST 数据 的 指导
最 大 的 问题 是 API 不 接受 POST 数据 。
在 您 的 代码 中 , 什么 是 有效 的 , 什么 是 无效 的 并 不 十分 清楚 。
您 拥有 的 唯一 API 文档 是
中 的 每 一 个
我 试 过 这个 网址 , 它 的 工作 .
我 的 请求 标题 :
格式
回应 信 头 :
格式
返回 此 JSON :
格式
如果 你 对 此 没有 问题 , 那么 就 把 它 从 你 的 问题 中 删除 。 它 只 是 分散 注意 力 。
你 不仅 没有 提供 任何 文件 , 你 也 没有 说明 你 收到 的 答复 。
Regarding the "https://5sim.net/v1/user/profile/"; request.
我 想 查看 请求 标 头 和 响应 标 头 :
格式
curl 响应 错误 代码
格式
我 找到 文件 了 。
不 应 使用
CURLOPT_POSTFIELDS
。这 是 一 个 GET 请求 。
删除 此 :
格式
添加 以下 内容 :
格式
来源 : CURLOPT_HEADEROPT explained
# # 更新 2
我 不 使用
curl_easy
, 在 过去 的 35 年 里 我 没有 写 过 任何 C 代码 。 我 可能 从来 没有 写 过 任何 C + + 。 我 通常 使用 PHP 。也许 你 可以 简化 代码 。
这 是 我 的 PHP 代码 , 它 工作 正常 。 我 确实 使用 了 很多 不 必要 的 选项 来 排除 故障 。 我 注册 了 自己 的 授权 令牌 。
格式
以下 选项 不是 必需 的 。
它们 用于 故障 排除 。
它 只 与 上述 选项 一起 工作 。
格式
我 的 请求 标题 :
格式
我 的 回应 :
格式
回应 信 头 :
格式
我 不能 帮助 你 的 C + + 或 回调 。
我 会 从 非常 基本 的 代码 开始 , 然后 在 您 得到 有效 的 响应 后 添加 其他 特性 。
你 能 把 你 的 代码 简化 成 这样 吗 :
格式