Добрый день! Для осуществления SOAP-запросов использую библиотеку curl и следующий метод.
void CurlSoapHandler::DoRequest(const std::string& sRequest, std::string& sResponse)
{
CURLcode res;
struct curl_slist *headerlist=NULL;
headerlist = curl_slist_append(headerlist, "Content-Type:text/xml");
curl_global_init(CURL_GLOBAL_ALL);
_CURL = curl_easy_init();
if(_CURL)
{
curl_easy_setopt( _CURL, CURLOPT_URL, GetURL().c_str());
std::string sAuthor = GetUserName ()+"@"+GetDomen()+":"+GetUserPassword ();
curl_easy_setopt( _CURL, CURLOPT_USERPWD, sAuthor.c_str());
curl_easy_setopt( _CURL, CURLOPT_POSTFIELDS, sRequest.c_str());
curl_easy_setopt( _CURL, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(_CURL, CURLOPT_WRITEFUNCTION, CurlSoapHandler::write_data_string);
curl_easy_setopt(_CURL, CURLOPT_WRITEDATA, &sResponse);
res = curl_easy_perform(_CURL);
if(res != CURLE_OK)
{
std::cerr<<"CURL message: "<<curl_easy_strerror(res)<<std::endl;
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(_CURL);
}
else
{
}
curl_global_cleanup();
curl_slist_free_all (headerlist);
}
Проблем не возникает. Когда я меняю URL на адрес c https, возвращается пустой ответ (sResponse) и ошибка «Unsupported protocol»,хотя вроде бы проверка сертификации отключена...Не подскажете, в чем может быть проблема?
void CurlSoapHandler::DoRequest(const std::string& sRequest, std::string& sResponse)
{
CURLcode res;
struct curl_slist *headerlist=NULL;
headerlist = curl_slist_append(headerlist, "Content-Type:text/xml");
curl_global_init(CURL_GLOBAL_ALL);
_CURL = curl_easy_init();
if(_CURL)
{
curl_easy_setopt( _CURL, CURLOPT_URL, GetURL().c_str());
std::string sAuthor = GetUserName()+"@"+GetDomen()+":"+GetUserPassword();
curl_easy_setopt( _CURL, CURLOPT_USERPWD, sAuthor.c_str());
curl_easy_setopt( _CURL, CURLOPT_POSTFIELDS, sRequest.c_str());
curl_easy_setopt( _CURL, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt( _CURL, CURLOPT_VERIFYPEER, 0L);
curl_easy_setopt( _CURL, CURLOPT_VERIFYHOST, 0L);
curl_easy_setopt(_CURL, CURLOPT_WRITEFUNCTION, CurlSoapHandler::write_data_string);
curl_easy_setopt(_CURL, CURLOPT_WRITEDATA, &sResponse);
res = curl_easy_perform(_CURL);
if(res != CURLE_OK)
{
std::cerr<<"CURL message: "<<curl_easy_strerror(res)<<std::endl;
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(_CURL);
}
else
{
}
curl_global_cleanup();
curl_slist_free_all (headerlist);
}
Перемещено Pinkbyte из linux-install