Как получить исходный код веб-страницы на C ++? - PullRequest
1 голос
/ 12 февраля 2012

Я использую язык Microsoft Visual Studio 2010 и C ++, который работает на консоли.

Я пытаюсь перейти на веб-страницу, затем получить источник этой веб-страницы (что я имею в виду под источником: в Firefox, когда вы щелкаете правой кнопкой мыши, затем «Просмотреть источник страницы») и сохраняйте его на своем компьютере как текстовый файл, чтобы я мог прочитать этот сохраненный файл позже. Можете ли вы дать мне пример того, как перейти на веб-сайт в c ++, а затем сохранить исходный код HTML на моем компьютере? Буду очень признателен за любую помощь

А как можно установить libcurl?

Когда я использую #include <curl/curl.h>, появляется сообщение об ошибке: невозможно открыть исходный файл «curl / curl.h.»

Ответы [ 4 ]

1 голос
/ 12 февраля 2012

Вам нужно использовать некоторые инструменты, поддерживающие HTTP, например WinINet (Windows) или libcurl (мультиплатформенность).Я использовал WinINet для связи с веб-серверами, и получить содержимое страницы было довольно легко.Вот несколько ссылок, чтобы дать вам подсказку, что делать:

Получить веб-страницу с помощью оболочки класса WinInet Использование WinInet в качестве альтернативы libcurl

0 голосов
/ 19 февраля 2015

Это небольшая программа, которую я сделал для извлечения и сохранения / записи исходного кода учетной записи Facebook в текстовом файле. Вы можете изменить его по своему усмотрению (вы можете изменить "http://www.facebook.com" на" http://www.google.com/")... Также не забудьте связать wininet.a (библиотеку) с вашим проектом. Надеюсь, это поможет:)

#include <windows.h>
#include <wininet.h>
#include <iostream>
#include <conio.h>
#include <fstream.h>
fstream fs_obj;
using namespace std;

int main(int argc, char *argv[])
{

  fs_obj.open("temp.txt",ios::out | ios::app);  
  HINTERNET hInternet = InternetOpenA("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );

  HINTERNET hConnection = InternetConnectA( hInternet, "www.facebook.com", 80, " "," ", INTERNET_SERVICE_HTTP, 0, 0 ); //enter url here

  HINTERNET hData = HttpOpenRequestA( hConnection, "GET", "/", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0 );

  char buf[ 2048 ] ;

  HttpSendRequestA( hData, NULL, 0, NULL, 0 ) ;
  string total;
  DWORD bytesRead = 0 ;
  DWORD totalBytesRead = 0 ;

  while( InternetReadFile( hData, buf, 2000, &bytesRead ) && bytesRead != 0 )
  {
    buf[ bytesRead ] = 0 ; // insert the null terminator.
    total=total+buf;
    printf( "%d bytes read\n", bytesRead ) ;

    totalBytesRead += bytesRead ;
  }

  fs_obj<<total<<"\n--------------------end---------------------\n";
  fs_obj.close();
  printf( "\n\n END -- %d bytes read\n", bytesRead ) ;
  printf( "\n\n END -- %d TOTAL bytes read\n", totalBytesRead ) ;

  cout<<endl<<total<<endl; //it will save source code to (temp.txt) file
  InternetCloseHandle( hData ) ;
  InternetCloseHandle( hConnection ) ;
  InternetCloseHandle( hInternet ) ;
  system("pause");
}

Переименуйте temp.txt с помощью temp.html, откройте его в браузере, и вы получите эту веб-страницу.

0 голосов
/ 12 февраля 2012

Узнайте, как узнать о многоуровневом протоколе и многоуровневом программном обеспечении first!

После этого определитесь с уровнем, который вы хотите разработать.Затем выберите API низкого или высокого уровня для вашей конкретной задачи.

Кстати: ваша конкретная задача не является типичной для C ++, вы можете легко использовать утилиту curl, например: curl YOURURL > file.html,Не нужно заново изобретать колесо.

0 голосов
/ 12 февраля 2012

Низкоуровневый подход: winsockets + протокол HTTP.

Подход более высокого уровня: библиотеки curl, WinINet API и так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...