我正在尝试向OpenStreetMaps Nominatim地理编码服务器发出HTTPS Get请求,但它正在提供SSL Excpetion,并且在我的生活中我无法弄明白。
典型的请求网址是: https://nominatim.openstreetmap.org/reverse?format=json&lat=37.325460&lon=-121.777310 哪个在我的浏览器中工作。 这是我的代码:
std::string httpsGet(const std::string& hostname, int port, const std::string& path, const std::string& query)
{
Poco::Net::initializeSSL();
Poco::Net::SSLManager::InvalidCertificateHandlerPtr ptrHandler ( new Poco::Net::AcceptCertificateHandler(false) );
Poco::Net::Context::Ptr ptrContext ( new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH") );
Poco::Net::SSLManager::instance().initializeClient(0, ptrHandler, ptrContext);
try {
URI uri(hostname); // https://nominatim.openstreetmap.org
uri.setPort(port); // 80
HTTPSClientSession session(uri.getHost(),uri.getPort());
uri.setPath(path); // reverse/
uri.setQuery(query); // format=json&lat=37.325460&lon=-121.777310
std::string _path(uri.getPathAndQuery());
// send request
HTTPRequest req(HTTPRequest::HTTP_GET, _path, HTTPMessage::HTTP_1_1);
req.set("user-agent", "[myemail]");
session.sendRequest(req);
HTTPResponse res;
std::istream &is = session.receiveResponse(res);
std::stringstream ss;
StreamCopier::copyStream(is, ss);
return ss.str();
} catch (std::exception &ex) {
std::cout << "HTTP GET error [" << ex.what() << "]" << std::endl;
return "";
}
}
但是我收到以下错误: “SSL例外”
SSL代码已从其他StackOverlfow帖子中复制而已作为答案给出,但它似乎在这里不起作用?
答案 0 :(得分:1)
我一发布就意识到自己失败了。 我使用HTTP端口80,对于SSL HTTPS,您需要端口443(通常)。
我一改变就好了。其他SO帖子没有指出过度尝试的工程师切换HTTP代码的明显,所以我希望这是有帮助的。