gpt4 book ai didi

poco-libraries - 如何使用 POCO 库和 OAuth2 发送 Get 和 Post 请求

转载 作者:行者123 更新时间:2023-12-02 20:25:05 26 4
gpt4 key购买 nike

我有一个 native 窗口应用程序,想要访问gitlab服务的API,希望使用POCO库和OAuth2使用名称和密码获取 token ,但我不知道如何向gitlab发送Get和Post请求OAuth2,并使用POCO库,请给我一个例子。

这是需要发送和接收的数据。

请求访问 token 向/oauth/token 发送带有参数的 POST 请求:

{
"grant_type" : "password",
"username" : "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2f5a5c4a5d6f4a574e425f434a014c4042" rel="noreferrer noopener nofollow">[email protected]</a>",
"password" : "secret"
}

然后,您将在响应中收到访问 token :

{
"access_token": "1f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa",
"token_type": "bearer",
"expires_in": 7200
}

最佳答案

首先您需要创建一个 HTTPRequest 对象,如下所示:

Poco::Net::HTTPClientSession* session = Poco::Net::HTTPSessionFactory::defaultFactory().createClientSession(serverUri);
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, serverUri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);

然后创建一个 HTMLForm:

Poco::Net::HTMLForm form; 
form.add("grant_type", "password");
form.add("client_id", "client token");
form.add("client_secret", "client secret");
form.add("username", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bacfc9dfc8fadfc2dbd7cad6df94d9d5d7" rel="noreferrer noopener nofollow">[email protected]</a>");
form.add("password", "secret");
form.prepareSubmit(request);

发送请求并将表单数据写入请求的输出流:

std::ostream& requestStream = session->sendRequest(request);
form.write(requestStream);

从 session 中获取响应:

Poco::Net::HTTPResponse response;
std::istream& responseStream = session->receiveResponse(response);
std::stringstream rawJson;
Poco::StreamCopier::copyStream(responseStream, rawJson);

解析原始 JSON:

 Poco::JSON::Parser parser;
Poco::JSON::Object::Ptr authObj = parser.parse(rawJson).extract<Poco::JSON::Object::Ptr>();

为下一个请求创建一个新 session ,并将授权 header 附加到请求中:

Poco::Net::HTTPClientSession* dataSession = Poco::Net::HTTPSessionFactory::defaultFactory().createClientSession(dataUri);
Poco::Net::HTTPRequest dataRequest(Poco::Net::HTTPRequest::HTTP_GET, dataUri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
dataRequest.add("Authorization", "Bearer " + authObj->get("access_token"));
dataSession->sendRequest(dataRequest);

获取响应并从流中读取数据:

std::stringstream data;
Poco::Net::HTTPResponse dataResponse;
Poco::StreamCopier::copyStream(dataSession->receiveResponse(dataResponse), data);

希望它有所帮助或指出正确的方向。

关于poco-libraries - 如何使用 POCO 库和 OAuth2 发送 Get 和 Post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50210236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com