Показать сообщение отдельно

C++ работа с прокси
  #1  
Старый 16.05.2010, 23:52
fire64
Участник форума
Регистрация: 01.04.2008
Сообщений: 200
С нами: 9531722

Репутация: 39
По умолчанию C++ работа с прокси

Здравствуйте.
Я пытаюсь отправлять GET запросы через HTTP прокси, однако в результате вместо содержимого нужного сайта получаю ошибку HTTP 301 Moved

PHP код:
char *GetQueryFromProxychar *urlchar *proxyhostchar *proxyportchar *Cookie )
{
    
char fulurl[512] = "";

    
sprintffulurlurl);

    if (
memcmp(url,"HTTP://",7)!=&& memcmp(url,"http://",7)!=0)
    {
        return 
NULL;
    }

    
url+=7;

    
// Ïîëó÷èì èìÿ õîñòà, íîìåð ïîðòà è ïóòü ----------------------------
    
char *http_host=strdup(url); // Èìÿ õîñòà (HTTP_HOST)
    
int port_num;             // Íîìåð ïîðòà ïî óìîë÷àíèþ (HTTP_PORT)
    
char *http_path=NULL;        // Ïóòü (REQUEST_URI)

    
char *pch=strchr(http_host,':');
    if (!
pch)
    {
        
pch=strchr(http_host,'/');
        
        if (
pch)
        {
            *
pch=0;
            
http_path=strdup(pch+1);
        }
        else
        {
            
http_path=strdup("");
        }
    }
    else
    {
        *
pch=0;pch++;
        
char *pch1 strchr(pch,'/');

        if (
pch1)
        {
            *
pch1=0;
            
http_path=strdup(pch1+1);
        }
        
        else 
http_path=strdup("");
    }
    
    
port_num atoi(proxyport);

    if (
port_num==0)
    {
        
port_num 80;
    }
    
    
WSADATA wsaData;

    
WSAStartup(MAKEWORD(2,2), &wsaData);

    
SOCKET  name_sock;

    
name_sock=socket AF_INETSOCK_STREAMIPPROTO_TCP ); 

    
sockaddr_in  dest_addr;
    
dest_addr.sin_family=AF_INET;
    
dest_addr.sin_port=htons port_num );
    
dest_addr.sin_addr.s_addr resolve(proxyhost);

    
int server_addr_size sizeof(dest_addr);

    if( 
connect(name_sock, (sockaddr*)&dest_addrsizeof(dest_addr)) == -)
    {
        
closesocket(name_sock );

        
WSACleanup();

        return 
NULL;
    }
    else
    {
        
char query[2048];

        
strcpy(query,"GET ");
        
strcat(query,fulurl);
        
strcat(query," HTTP/1.1\r\nHost: ");
        
strcat(query,http_host);
        
strcat(query,"\r\nUser-agent: Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
        
        
strcat(query,"\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        
strcat(query,"\r\nAccept-Language: ru,en-us;q=0.7,en;q=0.3");
        
strcat(query,"\r\nAccept-Encoding: gzip,deflate");
        
strcat(query,"\r\nAccept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7");
        
strcat(query,"\r\nKeep-Alive: 115");
        
strcat(query,"\r\nProxy-Connection: keep-alive");
      
        if( 
Cookie )
        {
            
strcat(query,"\r\nCookie: ");
            
strcat(query,Cookie);
        }
        
        
strcat(query,"\r\n\r\n");


        
// Send the magic http request
        
if (send(name_sockquerystrlen(query), 0) == SOCKET_ERROR)
        {
            
closesocket(name_sock );

            
WSACleanup();

            return 
NULL;
        }
    }

    
int nNumRead;

    
int otvetsize;

    
char otvet[40960];

    
otvetsize 40960;

    
nNumRead recv(name_sockotvetotvetsize0);

    
closesocket(name_sock );

    
WSACleanup();

    return 
otvet;

 
Ответить с цитированием