我在C++ Builder XE4 VCL 32bit中使用下面的代码。我正在使用Indy组件,版本10.6.0.497。在C++ Builder中使用Indy IdHTTP的HTTPS Web地址
我一直在使用IdHTTP->Get()
,并将HTTP地址改为HTTPS。我相信我需要创建一个TIdSSLIOHandlerSocketOpenSSL
组件并将其作为IOHandler
添加到TIdHTTP
。
当我尝试这样做,下面的代码给出了错误:
E2451 Undefined symbol 'TIdSSLIOHandlerSocketOpenSSL'
的错误是在代码,std::auto_ptr<TIdSSLIOHandlerSocketOpenSSL>
。
我不确定为什么TIdSSLIOHandlerSocketOpenSSL
未定义,因为我安装了Indy,并且可以使用TIdSSLIOHandlerSocketOpenSSL
作为组件面板中的传统组件。
任何人都可以告诉我如何设置此代码使用HTTPS地址?
std::auto_ptr<TIdSSLIOHandlerSocketOpenSSL> Local_IOHandler(new TIdSSLIOHandlerSocketOpenSSL(NULL));
//error: E2451 Undefined symbol 'TIdSSLIOHandlerSocketOpenSSL'
//error: E2299 Cannot generate template specialization from 'std::auto_ptr<_Ty>'
std::auto_ptr<TIdHTTP> Local_IdHTTP(new TIdHTTP(NULL));
Local_IdHTTP->Name="MyLocalHTTP";
Local_IdHTTP->HandleRedirects=true;
Local_IdHTTP->IOHandler=Local_IOHandler;
TStringStream *jsonToSend = new TStringStream;
UnicodeString GetURL = "https://chartapi.finance.yahoo.com/instrument/1.0/CLZ17.NYM/chartdata;type=quote;range=1d/csv/";
jsonToSend->Clear();
try
{
Local_IdHTTP->Get(GetURL, jsonToSend);
}
catch (const Exception &E)
{
ShowMessage(E.Message);
//error: IOHandler value is not valid
}
而BTW,10.6.0.497是Indy的旧版本。目前的版本是10.6.2.5422。在10.6.0和10.6.2之间进行了很多修改和修改。 –