C++ 使用Boost Asio C++;
使用Boost Asio C++; <我是C++和Boost Asio的新手,我想用Boost Asio创建一个简单的HTTP GET请求到我的程序中有OATN2(承载令牌)的网站,但是它不起作用,我不知道为什么,我尝试在克利永中进行LIPCURL和分开HTTP请求,并且它们工作得很好,没有任何问题。C++ 使用Boost Asio C++;,c++,boost,C++,Boost,使用Boost Asio C++;
#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;
}
}
}
#包括“netCommon/net_Common.h”
#包括
#包括
使用名称空间boost;
类型定义asio::ip::tcp ip;
int main(){
boost::system::error_code ec;
asio::io_服务ios;
//网站
std::string host_name=“api fxpractice.oanda.com”;
std::string port=“443”;
//解析DNS
解析程序解析程序(ios);
ip::resolver::query\u dns(主机名、端口、asio::ip::tcp::resolver::数字\u服务);
ip::resolver::iterator it=resolver\u dns.resolve(查询\u dns,ec);
//创建一个套接字
ip::套接字sock(ios);
//连接到端点
asio::连接(sock,it);
国际单项体育联合会(欧共体){
std::我想你应该使用Boost beast如果你坚持不使用beast,我会帮助你纠正这个代码如果你收到400个错误请求,HTTP本身就可以工作。我想你应该使用SSL而不是普通的HTTP。看看Boost::asio::SSL::stream
。