LINUX.ORG.RU

c++ curl Работа с https


0

1

Добрый день! Для осуществления 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


Маша, а можно вашу фотку? Мне чисто ради интереса, посмотреть.

false ★★★★★
()

неспеша пришло внедрение https LOR - чудо

anonymous
()
Ответ на: комментарий от NeXTSTEP

Эта драма продолжается уже 2 года, не удивительно.

wakuwaku ★★★★
()

Но почему в Linux-install? Маша решила брутфорсить разделы лора?

Следующий вопрос «Как собрать библиотеку curl с поддержкой https под DOS» нужно ждать в разделе «Midnight Commander», там уж наверняка ответят

anonymous
()

Спасибо! Но я что-то не поняла все-таки, как решилась проблема. Что-то изменилось в процессе компиляции? Я компилирую под Linux. При этом сертификата у меня нет, думаю, если проверки curl_easy_setopt( _CURL, CURLOPT_VERIFYPEER, 0L); curl_easy_setopt( _CURL, CURLOPT_VERIFYHOST, 0L); отключены, все должно работать без сертификата.

Masha
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.