Форум программистов, компьютерный форум, киберфорум
Наши страницы

Получение информации с сайта - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двойное объявление класса http://www.cyberforum.ru/cpp-beginners/thread934328.html
Для чего два раза писать class Animal? class Animal; void setValue (Animal&, int); class Animal { public: Animal(); ~Animal();
C++ Работа со списками Помогите пожалуйста с лабораторной работой: "Файл содержит следующую информацию (построчно): фамилия, имя, отчество. Считать файл в список таким образом, чтобы он оставался отсортирован по фамилиям... http://www.cyberforum.ru/cpp-beginners/thread934320.html
Разделение слов на слоги C++
Мне нужно написать программу для деления слов на слоги по определенным правилам. Пока что столкнулся с проблемой цикла. Для одного слова программа работает, но при попытке зациклить вылетает с...
C++ рекурсивный алгоритм и использование точности "Эпсилон"
Нихао всем) Тут такое дело. Нужно построить рекурсивный алгоритм, который бы возводил число "е" (экспоненту) в степень. Степень должна вводиться к клавиатуры. Но это не самое сложное: нужна еще...
C++ Массив ссылок на функции http://www.cyberforum.ru/cpp-beginners/thread934259.html
Объясните где ошибка: #include <iostream> void minimum (int*,int); void maximum (int*,int); void average (int*,int); int main() { setlocale(LC_CTYPE, "rus"); // русский язык в...
C++ Как напечатать содержимое окна windows forms? Помогите, мне надо, чтобы после нажатия на кнопку печаталось окно Windows Forms. Как это можно сделать? подробнее

Показать сообщение отдельно
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45

Получение информации с сайта - C++

06.08.2013, 15:57. Просмотров 1487. Ответов 11
Метки (Все метки)

Подскажите пожалуйста как получить данные с сайта. На данный момент меня не интересует никакая обработка информации, я пытаюсь лишь получить в программу исходный код страницы, но при попытке сделать это, у меня всегда в конце массива остается мусор. Подскажите как с этим бороться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <Windows.h>
#include <WinInet.h>
#pragma comment ( lib, "Wininet.lib" )
 
#include<iostream>
#include<cstring>
 
 
using namespace std;
int main(){
HINTERNET connect = InternetOpen("MyBrowser",INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, 0);
 
   if(!connect){
      cout<<"Connection Failed or Syntax error";
      return 0;
   }
 
HINTERNET OpenAddress = InternetOpenUrl(connect,"http://www.myip.ru/ru-RU/index.php", NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION, 0);
 
   if ( !OpenAddress )
   {
      DWORD ErrorNum = GetLastError();
      cout<<"Failed to open URL \nError No: "<<ErrorNum;
      InternetCloseHandle(connect);
      system("pause");
      return 0;
   }
 
   char DataReceived[4096]; //Определение массива заведомо бОльшего размера
   DWORD NumberOfBytesRead = 0; //ну типа скидываем количество засосанных байтов на 0, хотя в справке написано что функция сама сбрасывает их на 0 перед началом работы
   int counter=0; //Инициализируем счетчик, в который потом будет записано содержимое NumberOfBytesRead (количество прочитанных байтов)
   while(InternetReadFile(OpenAddress, DataReceived, 4096, &NumberOfBytesRead) && NumberOfBytesRead ) //Скачиваем побайтово ответ сервера
   {
        //cout << "NumofBRead" << NumberOfBytesRead;
        cout << DataReceived;
        counter = NumberOfBytesRead;
        //cout << counter << endl;
   }
   cout << endl << "Bytes Reciaved Counter="<<counter << endl; //отображаем счетчик, сколько в итоге мы получили полезных байт
   int i; //инициируем счетчик цикла
   
   char * test = new char[counter]; //вроде бы создаем указатель на массив, с размерностью = количеству полученных 
   for (i=0; i<counter; i++) { //С нулевой ячейки массива и до couter методично переносим данные из одного массива в другой, с целью получить массив без мусора, правильно законченный.
       test[i] = DataReceived[i]; //поочередно переносим каждый полезный байт из большего массива в массив заданной размерности счетчиком counter
   }
   
   cout << "v The full test char array:" << endl;
   cout << test << endl<< "^ The end of a test char array" << endl;
   cout << endl << "Data from the end of array test"<< ":"<< endl;
    cout << "test["<<counter+7<<"] ="<< test[counter+7] << endl;
    cout << "test["<<counter+6<<"] ="<< test[counter+6] << endl;
    cout << "test["<<counter+5<<"] ="<< test[counter+5] << endl;
    cout << "test["<<counter+4<<"] ="<< test[counter+4] << endl;
    cout << "test["<<counter+3<<"] ="<< test[counter+3] << endl;
    cout << "test["<<counter+2<<"] ="<< test[counter+2] << endl;
    cout << "test["<<counter+1<<"] ="<< test[counter+1] << endl;
   cout << "test["<<counter<<"] ="<< test[counter] << endl;
   cout << "test["<<counter-1<<"] ="<< test[counter-1] << endl;
   cout << "test["<<counter-2<<"] ="<< test[counter-2] << endl;
   cout << "test["<<counter-3<<"] ="<< test[counter-3] << endl;
   cout << "test["<<counter-4<<"] ="<< test[counter-4] << endl;
   cout << "test["<<counter-5<<"] ="<< test[counter-5] << endl;
   cout << "test["<<counter-6<<"] ="<< test[counter-6] << endl;
   cout << "test["<<counter-7<<"] ="<< test[counter-7] << endl;
   cout << "test["<<counter-8<<"] ="<< test[counter-8] << endl;
   cout << "test["<<counter-9<<"] ="<< test[counter-9] << endl;
 
 
   InternetCloseHandle(OpenAddress);
   InternetCloseHandle(connect);
 
   system("pause");
}
Я полагаю что моя попытка работы с массивами ошибочна. Я сначала определяю массив заведомо бОльшего размера чем код страницы и далее уже из того массива исходя из количества полученных байт создаю новый массив, в который потом побайтно переношу в цикле переношу всю ценную информацию. Проблема в том что в конце у меня всё равно мусор, хоть его и вроде бы не много. Подскажите как правильно завершить массив чтобы в нем не было ничего кроме html кода страницы?

В конечном итоге моей целью на данный момент является получение переменной содержащей внутри себя код страницы который я потом буду обрабатывать например регулярными выражениями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.