Работа с WinInet API
От: Duke_Nuken Украина  
Дата: 11.08.04 11:24
Оценка:
Люди подскажите как отправить данные методом POST

Проблема состоит в том, что я не могу правильно заполнить параметры функции HttpSendRequest
Что нужно указывать в параметрах lpszHeaders (добавление к хедеру) и lpOptional (это передаваемая строка)
для того чтобы на скрипт передать переменную info со значением "It's work!"
Подскажите, ОЧЕНЬ нужно...


    // инициализируем WinInet
    HINTERNET hInternet =
        ::InternetOpen(
            TEXT("WinInet Test"),
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,NULL,
            0);

if (hInternet != NULL) {
        // открываем HTTP сессию
        HINTERNET hConnect = 
            ::InternetConnect(
                hInternet,
                TEXT("192.168.1.19"),
                INTERNET_DEFAULT_HTTP_PORT,
                NULL,NULL,
                INTERNET_SERVICE_HTTP,
                0,
                1u);

    if (hConnect != NULL) {
            // открываем запрос
            HINTERNET hRequest = 
                ::HttpOpenRequest(
                    hConnect,
                    TEXT("POST"),
                    TEXT("/1/1.php"),
                    NULL,
                    NULL,
                    0,
                    INTERNET_FLAG_KEEP_CONNECTION,
                    1);

// создаем запрос
    
            char Header[100] = "Content-Disposition: form-data;";
            char POST_reqvest[25] = "info=test onfo";

          if (hRequest != NULL) {
                // посылаем запрос
                BOOL bSend = ::HttpSendRequest(hRequest, TEXT("Content-Disposition: form-data; name=info"), 50, TEXT("work"),10);
                if (bSend) {
                    
// создаём выходной файл
 FILE * pFile;
 
 pFile=fopen ("c:\\phpinfo.txt","wb");
 
int get_bites  = 0;
char  szData[1024];
DWORD dwBytesRead;
                        
                       for (;;) 
                       {
                        
                        BOOL bRead = ::InternetReadFile(hRequest,szData,sizeof(szData)-1, &dwBytesRead);

                        if ( bRead == 0 || dwBytesRead < 1)
                        {     
                            break;   
                        }

                        get_bites += dwBytesRead;

                        fwrite( szData, dwBytesRead, 1, pFile );

                       }
                        
 

fclose (pFile); 

                        
   
                    }
                }
                // закрываем запрос
                ::InternetCloseHandle(hRequest);
            }
            // закрываем сессию
            ::InternetCloseHandle(hConnect);
        }
        // закрываем WinInet
 ::InternetCloseHandle(hInternet);
  
    return 0;
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
Re: Работа с WinInet API
От: Аноним  
Дата: 11.08.04 12:09
Оценка:
CString strHeader(TEXT("Content-Type: application/x-www-form-urlencoded; text/html;charset=windows-1251"));
CString strPOST(TEXT("qqq=www"));

::HttpSendRequest(
hRequest,
(LPCTSTR)strHeader,
strHeader.GetLength(),
(LPVOID)(LPCTSTR)strPOST,
strPOST.GetLength());
Re[2]: Работа с WinInet API
От: Duke_Nuken Украина  
Дата: 11.08.04 12:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>CString strHeader(TEXT("Content-Type: application/x-www-form-urlencoded; text/html;charset=windows-1251"));

А>CString strPOST(TEXT("qqq=www"));

А>::HttpSendRequest(

А> hRequest,
А> (LPCTSTR)strHeader,
А> strHeader.GetLength(),
А> (LPVOID)(LPCTSTR)strPOST,
А> strPOST.GetLength());

Мне нельзя использовать CString

Вот такой код

char Header[79] = "Content-Type: application/x-www-form-urlencoded;text/html;charset=windows-1251";
char POST_r[10] = "info=test";
        
BOOL bSend = ::HttpSendRequest(hRequest, Header, sizeof(Header), POST_r, sizeof(POST_r));


вызывает ошибку:

Bad Request
Your browser sent a request that this server could not understand.
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
Re[3]: Работа с WinInet API
От: Аноним  
Дата: 11.08.04 14:02
Оценка:
Здравствуйте, Duke_Nuken, Вы писали:

D_N>
BOOL bSend = ::HttpSendRequest(hRequest, Header, sizeof(Header), POST_r, sizeof(POST_r));

Написано верно, значит что-то раньше не так написал...
D_N>вызывает ошибку: Bad Request. Your browser sent a request that this server could not understand.
А номер ошибки какой? Что возвращает ::GetLastError()

Я у себя вызов HttpOpenRequest выполняю так:
   LPTSTR szAcceptTypes[] = {TEXT("*/*"), NULL};
   DWORD dwFlags = INTERNET_FLAG_NEED_FILE | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI;
   hRequest = ::HttpOpenRequest(
      hConnect,
      TEXT("POST"):,
      (LPCTSTR)strURI,
      HTTP_VERSION_1_1,
      NULL,
      (LPCTSTR*)szAcceptTypes,
      dwFlags,
      0);
Re[4]: Работа с WinInet API
От: Duke_Nuken Украина  
Дата: 11.08.04 14:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я у себя вызов HttpOpenRequest выполняю так:

А>
А>   LPTSTR szAcceptTypes[] = {TEXT("*/*"), NULL};
А>   DWORD dwFlags = INTERNET_FLAG_NEED_FILE | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI;
А>   hRequest = ::HttpOpenRequest(
А>      hConnect,
А>      TEXT("POST"):,
А>      (LPCTSTR)strURI,
А>      HTTP_VERSION_1_1,
А>      NULL,
А>      (LPCTSTR*)szAcceptTypes,
А>      dwFlags,
А>      0);
А>


Дружище, ты не мог бы дать посмотреть готовое рабочее приложение?
Нужно просто... нет слов.
Запости весь код с начала вызова InternetOpen или еще лудьше
скинь мне на мыло примерчик — duke2004@ukr.net

Буду безумно благодарен.
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
Re[5]: Работа с WinInet API
От: SeregaLBN Украина  
Дата: 12.08.04 09:05
Оценка:
Здравствуйте, Duke_Nuken, Вы писали:
D_N>скинь мне на мыло примерчик
Отослан рабочий пример...
Серёга, любит баранью ногу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.