Вопрос по функции InternetReadFile (WinInet class)
От: trustno1  
Дата: 19.02.04 19:00
Оценка:
Подскажите, как правильно выбирать количество байтов для чтения в функции InternetReadFile (WinInet)?
Например, в след. коде параметр ir подобран чисто экспериментально:

                    char buf[151];
                    DWORD ir=68;
                    DWORD br;
                    while (TRUE)
                    {
                        InternetReadFile(hReq, buf, ir, &br);
                                         ...............


Если выбрать др. значение, то в получаемых строках html файла появляются всякие $шЗё%.
Как количество байтов зависят от буфера buf?
И вообще какие значения рекомендуется указывать?
Или может др. функцию стоит использовать?
Re: Вопрос по функции InternetReadFile (WinInet class)
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 19.02.04 19:13
Оценка: 2 (1)
Здравствуйте, trustno1, Вы писали:

T>Подскажите, как правильно выбирать количество байтов для чтения в функции InternetReadFile (WinInet)?

T>Например, в след. коде параметр ir подобран чисто экспериментально:

T>
T>                    char buf[151];
T>                    DWORD ir=68;
T>                    DWORD br;
T>                    while (TRUE)
T>                    {
T>                        InternetReadFile(hReq, buf, ir, &br);
T>                                         ...............
T>


T>Если выбрать др. значение, то в получаемых строках html файла появляются всякие $шЗё%.

T>Как количество байтов зависят от буфера buf?
T>И вообще какие значения рекомендуется указывать?
T>Или может др. функцию стоит использовать?

Буфер неициализирован, поэтому там всякая гадость... Напишите так:


char buf[151] = {0};


или так:


char buf[151];

memset(buf,0,sizeof(buf));
Re: Вопрос по функции InternetReadFile (WinInet class)
От: Аноним  
Дата: 19.02.04 19:38
Оценка:
Здравствуйте, trustno1, Вы писали:

T>Подскажите, как правильно выбирать количество байтов для чтения в функции InternetReadFile (WinInet)?

T>Например, в след. коде параметр ir подобран чисто экспериментально:

T>
T>                    char buf[151];
T>                    DWORD ir=68;
T>                    DWORD br;
T>                    while (TRUE)
T>                    {
T>                        InternetReadFile(hReq, buf, ir, &br);
T>                                         ...............
T>


T>Если выбрать др. значение, то в получаемых строках html файла появляются всякие $шЗё%.

T>Как количество байтов зависят от буфера buf?
T>И вообще какие значения рекомендуется указывать?
T>Или может др. функцию стоит использовать?

В br тебе возвращается фактическое число прочитанных в буфер байт. br <= ir
Re[2]: Вопрос по функции InternetReadFile (WinInet class)
От: trustno1  
Дата: 19.02.04 20:37
Оценка:
Здравствуйте, Flamer, Вы писали:

блин, я на этой инициализации уже столько раз...

Еще такой вопрос: пытаюсь подконнетиться к серверу через https,
но HttpSendRequest не проходит и GetLastError выдает ошибку 12045,
описания которой нет в WinError.h.
Как узнать что это за ошибка?
В логах веб-сервера видно, что запрос туда не доходит.

вот код:
        HINTERNET hInet;
        hInet = InternetOpen("My Applic",0,NULL,NULL,0);
        if (hInet)
        {
            HINTERNET hInetSess=InternetConnect(hInet, m_server, 443, NULL, NULL,
                                                INTERNET_SERVICE_HTTP, INTERNET_FLAG_EXISTING_CONNECT, 1);
            if (hInetSess)
            {
                HINTERNET hReq=HttpOpenRequest(hInetSess,"GET", 
                                               "manual/index.html","HTTP/1.1",
                                               NULL, NULL,
                                               INTERNET_FLAG_IGNORE_CERT_CN_INVALID|
                                               INTERNET_FLAG_IGNORE_CERT_DATE_INVALID|
                                               INTERNET_FLAG_SECURE,                                               
                                               2);
                ASSERT(hReq);
                BOOL res=HttpSendRequest(hReq, NULL,0,NULL,0);
                if (res)
                {
                    char buf[151]={0};
                              DWORD ir=150;
                    DWORD br;
                    while (TRUE)
                    {
                        InternetReadFile(hReq, buf, ir, &br);
                        if (ir==br)
                        {
                            m_output += buf;
                            UpdateData(FALSE);
                        }
                        else
                        {
                            for (short i=0; i<br; i++)
                            {
                                m_output += buf[i];
                            }
                            UpdateData(FALSE);
                            break;
                        }                    
                    }
                } 
                else 
                {
                    DWORD err;
                    err = GetLastError();
                    CString fmt;
                    fmt.Format("error code: %d",err);
                    AfxMessageBox(fmt);
                }

                InternetCloseHandle(hReq);
            } else {AfxMessageBox("Couldn't create HttpOpenRequest");}

            InternetCloseHandle(hInetSess);
        } else {AfxMessageBox("Couldn't create InernetConnect");}
        

        InternetCloseHandle(hInet);
Re[3]: Вопрос по функции InternetReadFile (WinInet class)
От: Vamp Россия  
Дата: 20.02.04 08:33
Оценка:
Может, дело в

HINTERNET hReq=HttpOpenRequest(hInetSess,"GET", 
                            "manual/index.html","HTTP/1.1",

а?
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Вопрос по функции InternetReadFile (WinInet class)
От: vadim77 Израиль  
Дата: 20.02.04 13:12
Оценка:
Здравствуйте, trustno1, Вы писали:

T>Здравствуйте, Flamer, Вы писали:


T>блин, я на этой инициализации уже столько раз...


T>Еще такой вопрос: пытаюсь подконнетиться к серверу через https,

T>но HttpSendRequest не проходит и GetLastError выдает ошибку 12045,
T>описания которой нет в WinError.h.
T>Как узнать что это за ошибка?
T>В логах веб-сервера видно, что запрос туда не доходит.

Эти ошибке содержаться не в WinError.h, а в WinInet.h

12045 — это ERROR_INTERNET_INVALID_CA
The function is unfamiliar with the Certificate Authority that generated the server's certificate.

Вот из MSDN, если тебе чем-то поможет. Потому как я сам с оной вещью не разбирался

SUMMARY
If a server SSL certificate is issued by unknown or invalid certificate authority WinInet HttpSendRequest API or MFC CInternetFile::SendRequest will fail with error 12045 (ERROR_INTERNET_INVALID_CA).

When Internet Explorer tries to access the same URL, similar error is reported.



MORE INFORMATION
This error occurs when the client does not know about the certificate authority that issued the server certificate. The problem may be corrected by installing the certificate authority's root certificate. A list of all installed certificates can be viewed from Internet Explorer. From the View menu, click Internet Options, click the Content tab, and click Authorities.
Re[4]: Вопрос по функции InternetReadFile (WinInet class)
От: trustno1  
Дата: 21.02.04 05:36
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Может, дело в


V>
V>HINTERNET hReq=HttpOpenRequest(hInetSess,"GET", 
V>                            "manual/index.html","HTTP/1.1",
V>

V>а?

да нет... что здесь по-вашему еще можно указать?
Re[4]: Вопрос по функции InternetReadFile (WinInet class)
От: trustno1  
Дата: 21.02.04 05:49
Оценка:
T>>Здравствуйте, Flamer, Вы писали:

осталось выяснить, как от нее избавиться, ведь через браузер все ОК, без ошибок.
Re[2]: Вопрос по функции InternetReadFile (WinInet class)
От: trustno1  
Дата: 24.02.04 06:50
Оценка:
Здравствуйте, Аноним, Вы писали:
А>В br тебе возвращается фактическое число прочитанных в буфер байт. br <= ir

так и есть. А что с этой ощибкой делать?
Re[3]: Вопрос по функции InternetReadFile (WinInet class)
От: IGor_79 Украина  
Дата: 24.02.04 07:49
Оценка:
Здравствуйте, trustno1, Вы писали:

T>Здравствуйте, Аноним, Вы писали:

А>>В br тебе возвращается фактическое число прочитанных в буфер байт. br <= ir

T>так и есть. А что с этой ощибкой делать?


Жить дальше и радоваться таким "ошибкам".
А если серьезно, то это не ошибка вовсе...
Я ж так понимаю InternetReadFile возвратила TRUE?
Re[4]: Вопрос по функции InternetReadFile (WinInet class)
От: trustno1  
Дата: 24.02.04 08:01
Оценка:
Здравствуйте, IGor_79, Вы писали:


IG_>Жить дальше и радоваться таким "ошибкам".

IG_>А если серьезно, то это не ошибка вовсе...
IG_>Я ж так понимаю InternetReadFile возвратила TRUE?

до InternetReadFile даже не дошло.
HttpSendRequest уже возвратила FALSE...с этой ошибкой 12045.
Какие будут предложения?
Re[5]: Вопрос по функции InternetReadFile (WinInet class)
От: Аноним  
Дата: 24.02.04 10:35
Оценка:
Здравствуйте, trustno1, Вы писали:

T>Здравствуйте, IGor_79, Вы писали:



IG_>>Жить дальше и радоваться таким "ошибкам".

IG_>>А если серьезно, то это не ошибка вовсе...
IG_>>Я ж так понимаю InternetReadFile возвратила TRUE?

T>до InternetReadFile даже не дошло.

T>HttpSendRequest уже возвратила FALSE...с этой ошибкой 12045.
T>Какие будут предложения?\

читай тут http://support.microsoft.com/default.aspx?scid=kb;en-us;182888
Re[6]: Вопрос по функции InternetReadFile (WinInet class)
От: trustno1  
Дата: 24.02.04 12:03
Оценка:
Здравствуйте, Аноним, Вы писали:


А>читай тут http://support.microsoft.com/default.aspx?scid=kb;en-us;182888


Биг фэт сэнк!!!
вот только почему они сделали так, что этот флаг нельзя впендюрить в HttpOpenRequest....
ну да ладно, хоть так.
Re[7]: Вопрос по функции InternetReadFile (WinInet class)
От: EugeneL  
Дата: 26.05.05 07:26
Оценка:
Есть сайт с полями ввода имени и пароля на входе
Передаются через POST & multipart-form.
Надо программно войти. Не получается.

А>>читай тут http://support.microsoft.com/default.aspx?scid=kb;en-us;182888


Этот совет в моем случае помогает при заведомо неверных имени и пароле, передаваемых
серверу (возвращает сообщение о некорректных данных).
Пишу правильные — все та же ошибка 12045 и запрос не отправляется.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.