如何解决使用Boost Asio C ++的HTTP获取请求
我是C ++和Boost Asio的新手,我想使用Boost Asio向程序中具有oAthn2(承载令牌)的网站创建一个简单的HTTP Get请求,但是它不起作用,我也不知道为什么,我尝试在Clion中将libCurl和Http请求分开,它们工作正常,没有任何问题。
#include "netCommon/net_Common.h"
#include <chrono>
#include <thread>
using namespace boost;
typedef asio::ip::tcp ip;
int main() {
boost::system::error_code ec;
asio::io_service ios;
//The website
std::string host_name = "api-fxpractice.oanda.com";
std::string port = "443";
//resolve DNS
ip::resolver resolver_dns(ios);
ip::resolver::query query_dns(host_name,port,asio::ip::tcp::resolver::numeric_service);
ip::resolver::iterator it = resolver_dns.resolve(query_dns,ec);
//Create a socket
ip::socket sock(ios);
//Connect to endpoint
asio::connect(sock,it);
if (ec){
std::cout << " Failed to connect: " << ec.message() << std::endl;
return ec.value();
}
std::cout << "Connected successfully !!! " << std::endl;
if (sock.is_open()) {
//Create a stream buffer
std::stringstream request_stream;
request_stream << "GET https://api-fxpractice.oanda.com/v3/accounts HTTP/1.1\r\n"
"Authorization: Bearer <my token>\r\n"
"Connection: close\r\n\r\n";
//Tried to change to Host: https://api-fxpractice.oanda.com,doesn't work either
const auto request = request_stream.str();
asio::write(sock,asio::buffer(request));
using namespace std::chrono_literals;
std::this_thread::sleep_for(2000ms);
size_t bytes = sock.available();
if (bytes > 0) {
std::vector<char> vBuffer(bytes);
std::cout << "Have something to read !" << std::endl;
asio::read(sock,asio::buffer(vBuffer));
for (auto c: vBuffer) {
std::cout << c;
}
}
}
它已连接到该站点,但我无法获取任何数据。 它不断向我发送“ HTTP / 1.1 400错误请求”或“普通HTTP请求...发送到HTTPS端口” 我不确定我在做什么错。 :( 非常感谢你们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。