Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   C++ работа с прокси (https://forum.antichat.xyz/showthread.php?t=204536)

fire64 16.05.2010 23:52

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;



slesh 16.05.2010 23:56

Код:

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

Это просто пздц. А если я напишу Http:// то облом будет. Юзай memicmp

А вообще HTTP 301 Moved
значит страница перенесена и в Location указан адрес куда перейти тебе нужно

fire64 17.05.2010 00:00

В том то и дело, что через браузер работает, а через мой код всегда ошибка 301 с ссылкой на введенный сайт

POS_troi 17.05.2010 00:05

в заголовках в поле Location что ? (по стопам slesh)

fire64 17.05.2010 00:09

Вот попытка запроса сайта http://google.ru

Код:

HTTP/1.1 301 Moved Permanently
Accept-Encoding: identity
Connection: close
Location: http://www.google.ru/
Content-Type: text/html; charset=UTF-8
Date: Sun, 16 May 2010 19:46:19 GMT
Expires: Tue, 15 Jun 2010 19:46:19 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 218
X-XSS-Protection: 1; mode=block

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.ru/">here</A>.
</BODY></HTML>


d_x 17.05.2010 00:11

Потому что обращаться надо к http://www.google.ru/

fire64 17.05.2010 00:28

Ок, точно
спасибо всем за помощь


Время: 18:25