Winsock /скачать файл с сервера

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by winsock, 30 Sep 2010.

  1. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    Некак не получатся правильно составить запрос на скачку файла .

    Сервер все время отвечает
    [​IMG]

    Код
    Code:
    char* CHttpUtilites::RequestHtml(char* GET,char* HOST) 
    {            if(HOST==NULL)
    		HOST = serverName;
    
    	if(!Connect(HOST))
    		return NULL;
    
    	int memory=MAX_PATH;
    	htmlBuff =(char*) malloc(memory * sizeof(char));
    
    	strcpy(htmlBuff,"GET: ");
    	strcat(htmlBuff,GET);	
    	
    	strcat(htmlBuff," HTTP/1.1\r\n");
    	strcat(htmlBuff,"Host: ");
    	strcat(htmlBuff,HOST);
    	strcat(htmlBuff,"\r\n");
    	
    	strcat(htmlBuff,"User-Agent: Mozilla/4.8 [en](Windows NT 5.0; U)\r\n");
    	
    	strcat(htmlBuff,"Connection: close\r\n\r\n");
    	
    	if(send(httpsock,htmlBuff,strlen(htmlBuff),0)==SOCKET_ERROR){
    		Disconnect();
    		return NULL;
    	}
    	
    	int recvByte;
    
    	while( (recvByte=recv(httpsock,&htmlBuff[memory-MAX_PATH],MAX_PATH,0))>0)
    	{
    		if(recvByte==MAX_PATH)
    		{
    			memory+=MAX_PATH;
    			realloc(htmlBuff,memory * sizeof(char));
    		}
    		
    	}
    
    	if(recvByte==SOCKET_ERROR){
    		Disconnect();
    		return NULL;
    	}
    
    	
    	printf("\n%s\n",htmlBuff);
    	
    	Disconnect();
    
    	return htmlBuff;
    }
    
    
    Пока что хочу хотя бы вывести на экран файл.

    Вызов

    Code:
    char* receiveInfo = RequestHtml("/1.txt");
     
  2. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,224
    Reputations:
    455
    А слабо было поглядеть как это делает любой браузер?
    Ты даже HTTP запрос не правильно составляешь.
    После GET двоеточие не ставится
     
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    winsock
    есть такая функция как sprintf (это я про strcat)

    и вот эта часть мне кажется бредом:
    Code:
    memory+=MAX_PATH;
    realloc(htmlBuff,memory * sizeof(char));
    вроде такой ход не работает... по крайней мере у меня не работал, когда-то.
    используй recv с флагом MSG_PEEK что-бы узнать размер пакета.
     
    _________________________
  4. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    спасибо, на GET: как то даже не подумал , т.к. если GET: \admin.php все работает
     
  5. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    2Gar|k способ работает ,но твой наверное лучше, попробую

    функцию sprintf знаю но хотелось бы обойтись без stdio.h
     
    #5 winsock, 30 Sep 2010
    Last edited: 30 Sep 2010
  6. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,009
    Likes Received:
    1,115
    Reputations:
    327
    user32!wsprintfA
     
  7. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    может пригодится суть в том что перебирает .dll и .exe и ищет в экспорте совпадение hxxp://zalil.ru/29751544
     
    #7 greki_hoy, 30 Sep 2010
    Last edited: 30 Sep 2010
Loading...