работа с куками (C++)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Satell, 8 Jul 2007.

  1. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    1. Как сделать, чтобы код на vc++ ниже, скачивающий страницу, добавлял в заголовок запроса такую куку из джава скрипта? т.е. чтобы сервер опряделял, что у меня есть поддержка кук и читал эту куку...
    и ещё есть ли в с++ библиотека на подобии как в perl LWP::UserAgentLWP cookie_jar, чтобы когда я запрашиваю страницу у меня определялось, что куки включены и также сохранялись там куки с запрашиваемой страницы.
    Если это нельзя сделать с помощью WinInet, то буду благодарен за код на сокетах
    2. как сделать чтобы тянуть не всю страницу, а только http заголовок?

    <script language="javascript" type="text/javascript">
    <!--
    document.cookie='roton=MnwwfDExODM4ODExMDR8MTE4Mzg4MTEwNHwwO2Jvb2ttYXJrfG5vcmVmX2lu; expires=Mon, 09 Jul 2007 07:51:44 GMT; path=/;';
    document.cookie='fav=1183881104; expires=Mon, 07 Jul 2008 07:51:44 GMT; path=/;';
    //-->
    </script>

    Code:
    #include "stdafx.h"
    
    #include <windows.h>
    #include <wininet.h>
    #pragma comment(lib,"wininet")
    
    #include <stdlib.h>
    #include <fstream.h>
    
    int main(int argc, char* argv[])
    {
    	bool ok = false;
    
    	
    	HINTERNET hInternet =
    		::InternetOpen(
    			TEXT("WinInet Test"),
    			INTERNET_OPEN_TYPE_PRECONFIG,
    			NULL,NULL,			
    			0);
    
    	if (hInternet != NULL) {
    		HINTERNET hConnect = 
    			::InternetConnect(
    				hInternet,
    				TEXT("www.site.com"),
    				INTERNET_DEFAULT_HTTP_PORT,
    				NULL,NULL,
    				INTERNET_SERVICE_HTTP,
    				0,
    				1u);
    
    		if (hConnect != NULL) {
    			HINTERNET hRequest = 
    				::HttpOpenRequest(
    					hConnect,
    					TEXT("GET"),
    					TEXT("cgi-bin/infomy.cgi"),
    					NULL,
    					NULL,
    					0,
    					INTERNET_FLAG_KEEP_CONNECTION,
    					1);
    
    			if (hRequest != NULL) {
    				BOOL bSend = ::HttpSendRequest(hRequest, NULL,0, NULL,0);
    				if (bSend) {
    					ofstream fnews("mp3.htm",ios::out|ios::binary);
    					if (fnews.is_open()) for (;;) {
    						char  szData[1024];
    						DWORD dwBytesRead;
    						BOOL bRead = 
    							::InternetReadFile(
    								hRequest,
    								szData,sizeof(szData)-1,
    								&dwBytesRead);
    
    						if (bRead == FALSE  ||  dwBytesRead == 0)
    							break;
    
    						szData[dwBytesRead] = 0;
    						fnews << szData;
    
    						ok = true;
    					}
    				}
    
    				::InternetCloseHandle(hRequest);
    			}
    
    			::InternetCloseHandle(hConnect);
    		}
    		
    		::InternetCloseHandle(hInternet);
    	}
    
    	if (ok)
    		system("start mp3.htm");
    
    	return 0;
    }
    
     
  2. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    кука не читается, добавляю в ф-и httpsendrequest дополнительные заголовки и читаю на сервере $env{HTTP_COOKIE}, так вот она пустая, Accept-language читается нормально.

    char* header ="Cookie: test=12345\r\nAccept-language: en-us\r\n";
    BOOL bSend = ::HttpSendRequest(hRequest, header,44, NULL,0);


    да кстате как прочитать куки из страницы, которую я загружаю?
     
  3. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    roton=MnwwfDExODM4ODExMDR8MTE4Mzg4MTEwNHwwO2Jvb2ttYXJrfG5vcmVmX2lu; expires=Mon, 09 Jul 2007 07:51:44 GMT; path=/;
    fav=1183881104; expires=Mon, 07 Jul 2008 07:51:44 GMT; path=/;
    Как вытащить этот текст из страницы без регулярных выражений?

    document.cookie='текст1';
    document.cookie='текст2';
    текст1=roton=MnwwfDExODM4ODExMDR8MTE4Mzg4MTEwNHwwO2Jvb2ttYXJrfG5vcmVmX2lu; expires=Mon, 09 Jul 2007 07:51:44 GMT; path=/;
    текст2=fav=1183881104; expires=Mon, 07 Jul 2008 07:51:44 GMT; path=/;
     
    #3 Satell, 9 Jul 2007
    Last edited: 9 Jul 2007