gpt4 book ai didi

C++ Http 请求 SSL 错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:15 25 4
gpt4 key购买 nike

好的,所以我正在处理这个 c++ 项目,我从一个站点读取,需要谷歌,才能获得要显示给用户的答案,我正在使用此链接中的代码 calling a website second solution第二个解决方案作为我项目的基础。从 Google 的搜索结果中请求 xml 将不起作用,因为答案不在 xml 中,所以我使用 google 自定义搜索 api 进行了 google 自定义搜索以输出到 json。我的问题是什么时候请求 url,link to my google custom search example here , 在 json 中,它从我的程序中给出了一个 ssl 错误。我该如何解决这个 ssl 问题?似乎我需要获取 https 而不是 http,或者我需要代码来验证 ssl 证书。不确定如何执行此操作,因为我是 c++ 上的协议(protocol)和网络等方面的新手。

不能使用第三方库。

我提前为我的问题和在这个问题上的菜鸟道歉。

最佳答案

given code使用普通套接字,代码中未提及 SSL,因此它不适用于 HTTPS 或任何其他基于 SSL 的协议(protocol)。为了连接到 HTTPS 网页,必须使用 OpenSSL 或任何其他为 TCP 套接字提供这一层的库(除非你要自己处理加密,我怀疑这一点)。下面是一个使用 Boost 库的例子:

/*

Compile with
g++ -std=c++11 -lpthread -lboost_system -lssl -lcrypto -ogoog goog.cpp

*/


#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>


using std::cout;
using std::endl;
using std::vector;
using std::string;
using boost::asio::ip::tcp;
using boost::asio::ip::address;
using boost::asio::io_service;
using boost::asio::connect;
using boost::asio::buffer;
using boost::system::error_code;
using boost::system::system_error;
using boost::asio::ssl::context;


int main()
{
const char* PORT = "443";
const string HOST = "googleapis.com";
const string REQUEST = "GET https://www.googleapis.com/customsearch/v1?q=when%20is%20george%20washingtons%20birthdate&cx=014855184903748195002:umdboiolvoi&key=AIzaSyDxFosFrZlMpgdFeTsPWZfp925MbaBX49s HTTP/1.1\r\n\r\n";

try
{
io_service ios;
tcp::resolver resolver(ios);
tcp::resolver::query query(HOST, PORT);
tcp::resolver::iterator iterator = resolver.resolve(query);
context ctx(context::sslv23);

boost::asio::ssl::stream<tcp::socket> sock(ios, ctx);
sock.set_verify_mode(boost::asio::ssl::verify_none);
connect(sock.lowest_layer(), iterator);
sock.handshake(boost::asio::ssl::stream_base::client);

const int BUFLEN = 2048;
vector<char> buf(BUFLEN);
sock.write_some(boost::asio::buffer(REQUEST, REQUEST.size()));
while (true)
{
size_t len = sock.read_some(boost::asio::buffer(buf, BUFLEN));
cout << "main(): buf.data()=";
cout.write(buf.data(), len);
}

}
catch (system_error& exc)
{
cout << "main(): exc.what()=" << exc.what() << endl;
}

return EXIT_SUCCESS;
}

它通过 SSL 套接字连接到 Google API(不执行证书验证),发送 GET 请求,获取页面并打印到标准输出。但是,它是在无限循环中完成的,因此由您来解析 JSON 答案并确定何时退出读取循环。

关于C++ Http 请求 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36806430/

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