使用curlpp同步HTTPS请求

时间:2018-10-09 09:54:11

标签: c++ https synchronous curlpp

当我尝试使用curlpp执行大量同步https请求时,出现以下错误:

  

无法连接到https://www.google.com/端口443:没有通往主机的路由

下面的代码当然只是实际代码的精简示例。网址不同,但结果相同。

void ThreadFunction()
{
   try
   {
      curlpp::Cleanup myCleanup;
      std::ostringstream os;
      os << curlpp::options::Url("https://www.google.com/");
   }
    catch( curlpp::RuntimeError &e )
    {
        std::cout << e.what() << std::endl;
    }
   catch( curlpp::LogicError &e )
    {
        std::cout << e.what() << std::endl;
   }
}

int main(void)
{
   thread threads[10];

   int loops = 0;

   while(loops < 3000)
   {
      for(int i = 0; i < 10; i++)
      {
         threads[i] = thread(ThreadFunction);
      }

      for(int i = 0; i < 10; i++)
      {
         threads[i].join();
      }
      loops++;
   }

   return 0;
}

错误并非从一开始就直接发生,而是在循环〜1000附近发生。之后,每个请求都会生成此错误。我尝试为每个线程使用不同的端口(例如80),但是curlpp似乎仅使用端口443执行https请求。当仅运行一个线程时,一切似乎都很好(除非它花费的时间太长,因此需要多个线程)。

所以我的理论A:实际上可以执行这样的同步请求,但是在请求之后我缺少一些端口的关闭/清理功能。 (我的意思是,它适用于第一个〜1000 * 10个请求)

理论B:不可能同时在同一端口上执行请求 ,但是线程恰好在稍稍使用同一端口的情况下不同的时间(直到不是,直到〜1000)

或C:根本不允许,在一堆请求之后,一些网络霸主已经受够了,并阻止了新请求。

我必须承认,我在网络方面的知识有限,无法在这里查明原因或找到解决方案。处理这样的任务的最佳方法是什么?任何帮助表示赞赏。

0 个答案:

没有答案