title: C++ download file from https
body: <p>I'm currently using this function to download files from http but can't make it work for urls with https:</p>
  
  <pre><code>bool DownloadFile(string url, LPCSTR filename){
      string request; // HTTP Header //
      char buffer[BUFFERSIZE];
      struct sockaddr_in serveraddr;
      int sock;
      WSADATA wsaData;
      int port = 80;
      if(url.find("http://") != -1){
          string temp = url;
          url = temp.substr(url.find("http://") + 7);
      }
      int dm = url.find("/");
      string file = url.substr(dm);
      string shost = url.substr(0, dm);
      request += "GET " + file + " HTTP/1.0\r\n";
      request += "Host: " + shost + "\r\n";
      request += "\r\n";
      if (WSAStartup(MAKEWORD(2, 0), &amp;wsaData) != 0)
          return FALSE;
      if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) &lt; 0)
          return FALSE;
      memset(&amp;serveraddr, 0, sizeof(serveraddr));
      hostent *record = gethostbyname(shost.c_str());
      in_addr *address = (in_addr * )record-&gt;h_addr;
      string ipd = inet_ntoa(* address);
      const char *ipaddr = ipd.c_str();
      serveraddr.sin_family = AF_INET;
      serveraddr.sin_addr.s_addr = inet_addr(ipaddr);
      serveraddr.sin_port = htons(port);
      if (connect(sock, (struct sockaddr *) &amp;serveraddr, sizeof(serveraddr)) &lt; 0)
          return FALSE;
      if (send(sock, request.c_str(), request.length(), 0) != request.length())
          return FALSE;
      int nRecv, npos;
      nRecv = recv(sock, (char*)&amp;buffer, BUFFERSIZE, 0);
      string str_buff = buffer;
      npos = str_buff.find("\r\n\r\n");
      HANDLE hFile;
      hFile = CreateFileA(filename, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
      SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
      DWORD ss;
      while((nRecv &gt; 0) &amp;&amp; (nRecv != INVALID_SOCKET)){
          if(npos &gt; 0){
              char bf[BUFFERSIZE];
              memcpy(bf, buffer + (npos + 4), nRecv - (npos + 4));
              WriteFile(hFile, bf,nRecv - (npos + 4), &amp;ss, NULL);
          }else{
              WriteFile(hFile, buffer, nRecv, &amp;ss, NULL);
          }
          ZeroMemory(&amp;buffer, sizeof(buffer));
          nRecv = recv(sock, (char*)&amp;buffer, BUFFERSIZE, 0);
          str_buff = buffer;
          npos = str_buff.find("\r\n\r\n");
      }
      CloseHandle(hFile);
      closesocket(sock);
      WSACleanup();
  
      return TRUE;
  }
  </code></pre>
  
  <p>Is there a way to download files from https without curl? I would prefer to be done with sockets or Boost if possible. If necessary, I want to download a file from BitBucket.</p>
  
  <p>Many thanks!</p>