На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> http
    Привет, народ!
    Имеется в инете некоторый файл, надо его скачать "вручную". Как???
      мне очень ндравится делать всякие штучки в API, так как он более нагляден, прозрачен для меня, а так же экзешнички по-меньше делает :)
      так что звиняйте ...

      #define RBC_PORT 80
      #define RBC_ADDR "127.0.0.1"
      SOCKET SendSocket;
      int rc;
      WSADATA WSAData;
      rc = WSAStartup(MAKEWORD(1, 1), &WSAData);
      if(rc != 0) return FALSE;
      struct sockaddr_in srv_address;
      int namelen;
      SendSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      if(SendSocket != INVALID_SOCKET) {
      memset(&srv_address,0,sizeof(SOCKADDR_IN));
      srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
      srv_address.sin_family = AF_INET;
      srv_address.sin_port = 0;
      }
      if(bind(SendSocket, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) {
      closesocket(SendSocket);
      return FALSE;
      } else {
      namelen=sizeof(SOCKADDR_IN);
      getsockname(SendSocket,(SOCKADDR *)&srv_address,&namelen);
      return TRUE;
      }

      SOCKADDR_IN remoteAddr;
      int err;
      int iMsg = 0;
      int iLength;
      int iEnd = 0;
      BYTE sBuf[4096];
      char *RbcMessage[] =
      {
      "GET /index.html HTTP/1.0\r\n",
      "Accept: */*\r\n",
      "Referer: http://www.sources.ru\r\n",
      "Accept-Language: ru\r\n",
      "Accept-Encoding: gzip, deflate\r\n",
      "User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)\r\n",
      "Host: www.rbc.ru\r\n\r\n\r\n",
      NULL
      };
      remoteAddr.sin_family = AF_INET;
      remoteAddr.sin_port = htons(RBC_PORT);
      remoteAddr.sin_addr.s_addr = inet_addr(RBC_ADDR);
      err = connect (SendSocket, (PSOCKADDR) & remoteAddr, sizeof (remoteAddr));
      if(err) {
      }
      else {
      do {
      send(SendSocket, (LPSTR)RbcMessage[iMsg], strlen(RbcMessage[iMsg]), 0);
      iMsg++;
      } while(RbcMessage[iMsg]);
      iLength = recv(SendSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0);
      }
      closesocket(SendSocket);

      после выполнения ентого примера, переменная sBuf, поидее должна содержать заглавную страничку с запрашиваемого сайта :)
        Наверное через WinInet проще - ненужно будет думать, прямое соединение с инетом на данной машине или через прокси...
          2breeder:
          ну так ясный перец :) просто человек, задавший вопрос, скорее всего не понимает работы данного механизма, а приведённый мной пример хоть как-то наглядно показывает - как енто работает.
          а я считаю, что если программист поставил перед собой задачу, то прежде чем воплотить её, сперва надо хотя бы представлять себе структуру данной задачи.
            2purpe:
            Ну это как посмотреть \%)
            Человек, задавший вопрос, скорее всего, разрабатывает какую-то программу, доставка из интернета файла в которой является всего лишь одной из операций.
            Например, когда я пишу какой-либо код, я абсолютно не задумываюсь как будет вести себя каждый из милионов (или милиардов?) транзисторов из которых состоит процессор при выполнении этого кода \%)
              извините за тупой вопрос, но все таки...
              как сделать тоже самое только через проксю с авторизацией??
              желательно сразу пример исходника, если есть...
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0589 ]   [ 16 queries used ]   [ Generated: 17.06.24, 09:18 GMT ]