Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ЛеЖиК)
185 / 60 / 4
Регистрация: 29.04.2011
Сообщений: 642
1

Слеш и hInternet

07.10.2011, 17:02. Просмотров 851. Ответов 4
Метки нет (Все метки)

Вообщем есть такой код
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
int main(int argc, char* argv[])
{
    setlocale(LC_CTYPE, ""); //русский текст
    
    strcpy(url,"ya.ru");
    readsite(url);
 
    
 
 
 
 
 
 
 
    return 0;
}
bool readsite(char *url)
{
          bool ok = false;
       // Инициализация WinInet
        HINTERNET hInternet = ::InternetOpen(
                TEXT("WinInet Test"),
                INTERNET_OPEN_TYPE_PRECONFIG,
                NULL,
                NULL,
                0);
 
        if (hInternet != NULL)
        {
                // Открывает HTTP сессию
                HINTERNET hConnect = ::InternetConnect( hInternet, (LPCSTR)url,  INTERNET_DEFAULT_HTTP_PORT,  NULL, NULL,INTERNET_SERVICE_HTTP,0,1u);
 
                if (hConnect != NULL)
                {
                        // открываем запрос
                        HINTERNET hRequest = ::HttpOpenRequest(
                                hConnect,
                                TEXT("GET"),
                                TEXT(""), 
                                NULL,
                                NULL,
                                0,
                                INTERNET_FLAG_KEEP_CONNECTION,
                                1);
 
                        if (hRequest != NULL)
                        {
                                // посылаем запрос
                                BOOL bSend = ::HttpSendRequest(hRequest, NULL, 0, NULL, 0);
                                if (bSend)
                                {
                                       
                  
                                                for (;;)
                                                {
                                                        // чиаем данные
                                                        char szData[1024];
                                                        DWORD dwByteRead;
                                                        BOOL bRead = ::InternetReadFile(
                                                                hRequest,
                                                                szData,
                                                                sizeof(szData)-1,
                                                                &dwByteRead);
 
                                                        // выход из цикла при ошибке или завершения
                                                        if (bRead == FALSE || dwByteRead == 0)
                                                                break;
 
                                                        // сохраняем результат
                                                        
                                                        szData[dwByteRead] = 0;
                                                        strcpy(koD.kod_HTML,szData);
                                                        Kod.push_back(koD);
 
                                                        
 
                                                        ok = true;
                                                }
                                                
 
 
                                }
                                else 
                                ERR"Error bsend";
                                // закрыываем запрос
                                ::InternetCloseHandle(hRequest);
                        }
                        else 
                            ERR"Error Request";
                        // закрываем сессию
                        ::InternetCloseHandle(hConnect);
                }
                else 
                    ERR"Error connect";
                // закрываем WinInet
                ::InternetCloseHandle(hInternet);
        }
        else 
            ERR"Error iternet";
 
 
        return 1;
}
Если пятая строка будет вида strcpy(url,"ya.ru"); то все шикарно работет
если же сделать вида strcpy(url,"ya.ru/"); то выдает ошибку(bSend=0)
так же с другими url где используется слеш
Как с этим бороться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2011, 17:02
Ответы с готовыми решениями:

Hinternet не видит переменную
hinternet не видит переменную фаил txt domain1.ru domain2.ru domain3.ru...

Ofstream дублирует бэк-слеш
Здравствуйте, столкнулся с проблемой, что при чтении из файла путём...

Удвоенный двойной слеш в wstring
Здравствуйте. Делаю так: std::wstring s = argv ; s += L" "; s += argv; ...

Заменить обратный слеш на обычный
К примеру, у нас есть ссылка:...

std::string и двойной слеш
Вопрос достаточно прост в примитивной программе: #include <iostream> #include...

4
gooseim
Эксперт С++
511 / 415 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
07.10.2011, 17:20 2
Как с этим бороться?
Не использовать слеш.
0
ЛеЖиК)
185 / 60 / 4
Регистрация: 29.04.2011
Сообщений: 642
07.10.2011, 17:28  [ТС] 3
а как мне обратиться к адресу например http://auto.yandex.ru/models.xml?mark=DAEWOO
(случайный адрес для примера взял)
0
gooseim
Эксперт С++
511 / 415 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
07.10.2011, 17:35 4
Самый простой вариант: InternetOpenUrl

Добавлено через 5 минут
Либо чтобы не переписывать код:
C++
1
2
3
4
5
6
7
8
9
HINTERNET hRequest = ::HttpOpenRequest(
                                hConnect,
                                TEXT("GET"),
                                TEXT("/models.xml"), 
                                NULL,
                                NULL,
                                0,
                                INTERNET_FLAG_KEEP_CONNECTION,
                                1);
Тогда нужно еще послать параметры.
1
ЛеЖиК)
185 / 60 / 4
Регистрация: 29.04.2011
Сообщений: 642
07.10.2011, 18:10  [ТС] 5
gooseim, спасибо, помогло
код доже сократился в два раза
0
07.10.2011, 18:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2011, 18:10

Как экранировать слеш для char?
Привет всем.. Подскажите как сравнить значение char со слешем? Вот так не...

Каким образом записать слеш в символьную переменную
дело в том что таким '\' образом не катит компилятор ругается

Найти в строке way левый слеш и заменить его на правый
Есть код, нужно найти в строке way левый слеш и заменить его на правый) void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru