波科HTTPSClientSession与谷歌云端硬盘API

问题描述 投票:0回答:1

对于我的桌面应用程序来访问我的谷歌驱动器,我使用的身份验证和查询Poco。当请求访问令牌,我面临着Poco::Net::HTTPSClientSession问题。我的代码如下所示。

namespace net = Poco::Net;
net::Context::Ptr ctx =
    new net::Context(net::Context::CLIENT_USE, "", net::Context::VerificationMode::VERIFY_NONE);
net::HTTPSClientSession client("accounts.google.com", net::HTTPSClientSession::HTTPS_PORT, ctx);

net::HTTPRequest req(net::HTTPRequest::HTTP_POST, "/o/oauth2/token", net::HTTPMessage::HTTP_1_1);
net::HTMLForm    form;
form.add("code", accessCode);
form.add("client_secret", client_secret);
form.add("client_id", client_id);
form.add("grant_type", "authorization_code");
form.add("redirect_uri", redirect_uri);
form.prepareSubmit(req);

// req.setChunkedTransferEncoding(true);

form.write(std::cout);
std::cout << std::endl;
client.sendRequest(req);

req.write(std::cout);
std::cout << "Method: " << req.getMethod() << std::endl;
net::HTTPResponse resp;
auto&&            is = client.receiveResponse(resp);
std::copy(
    std::istream_iterator<char>(is), std::istream_iterator<char>(), std::ostream_iterator<char>(std::cout));
std::cout << std::endl;

我收到超时异常与上面的代码。如果我打开块传输编码,我碰到谷歌的错误

“缺少必需的参数:grant_type”

有一些不正确使用的传输编码在我的代码,我无法弄清楚。我在想什么?

编辑:在邮差同一请求工作正常(有或没有传输编码分块)。

谢谢,苏里亚

c++ c++11 google-drive-sdk poco poco-libraries
1个回答
0
投票

回答我的问题。

我不是形式的数据写入到该问题给请求的身体。改变了这样的代码

auto&& strm = client.sendRequest(req);
form.write(strm);

现在,它的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.