Сокеты, получение кода Html страницы и обработка пропсов

Тема в разделе "Общие вопросы по С и С++", создана пользователем ABTOP, 18 окт 2008.

  1. ABTOP

    ABTOP Гость

    Тут вот какое дело, решил разобраться с сокетами и сейчас пытаюсь зделать редирект...

    [codebox]#include <stdio.h>
    #include <winsock2.h>
    #include <string.h>
    #include <fstream.h>

    #pragma comment( lib, \"wsock32.lib\" )

    void Initializate(char [], char [],char []);
    void redirect(char response[]);
    char* copynn(char *, int, int);

    SOCKET s;

    void main()
    {
    Initializate(\"88.208.11.11\",\"tvoi-dosug.com\",\"/in.htm?wm=1056898\");
    }

    void Initializate(char ip[], char host[], char url[])
    {
    const int SIZE=60000;

    char request[1024*2];
    char *response=new char[1024];
    sockaddr_in s_a;
    WSADATA wd;

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

    s = socket( AF_INET, SOCK_STREAM, 0 );
    if (s == INVALID_SOCKET)
    printf(\"INVALID_SOCKET\");
    s_a.sin_addr.s_addr = inet_addr( ip );
    s_a.sin_port = htons( 80 );
    s_a.sin_family = AF_INET;

    if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR)
    printf(\"SOCKET_ERROR\");

    sprintf( request, \"GET %s HTTP/1.1\\r\\nHost: %s\\r\\nConnection: Close\\r\\n\\r\\n\", url, host );
    send( s, request, strlen( request ), 0 );

    recv( s, response, 1024, 0 );

    printf(\"%s\\n\", response);
    redirect(response);

    closesocket( s );
    WSACleanup();
    }

    void redirect(char *response)
    {
    try
    {
    int i, j;
    response=strstr(response, \"Location: \");
    response=strstr(response, \"://\");
    for (i=0; i<(int)(strlen(response)-3); i++)
    {
    response=response[i+3];
    if (response==\'\\n\')
    {
    for (j=i; j<(int)strlen(response); j++)
    response[j]=NULL;
    break;
    }
    }
    char *host=new char[(int)strcspn(response, \"/\")], *url=new char[strlen(response)-(int)strcspn(response, \"/\")];
    host=copynn(response, 0, (int)strcspn(response, \"/\"));
    url=copynn(response, (int)strcspn(response, \"/\"), strlen(response));
    printf (\"\\n+-------------------------------------------------------------------+\"
    \"\\n|\\n|\"
    \"\\n| NEW: HOST: %s\\tURL: %s\"
    \"\\n|\\n|\"
    \"\\n+-------------------------------------------------------------------+\\n\", host, url);
    Initializate(\"88.208.11.11\",host,url);
    }
    catch(...)
    {
    printf(\"STROKA OTSUTSTVUET\\n\");
    }
    };

    char *copynn(char *s1, int n, int k)
    {
    char *s2=new char[k-n];
    int j=0;
    for (int i=n; i<k; i++)
    s2[j++]=s1;
    s2[j]=\'\\0\';
    return s2;
    }[/codebox]

    Результат выполнения и краткое описание:

    Результат запуска функции Initializate. Это полный ответ на запрос(есть пропсы+код страницы)
    Код (Text):
    HTTP/1.1 302 Found
    Server: Resin/3.1.3
    Location: http://ccm2.rb-net.com/tds/in.htm?wmid=1056898&l=
    Content-Type: text/html; charset=utf-8
    Content-Length: 87
    Connection: close
    Date: Sat, 18 Oct 2008 18:57:45 GMT

    The URL has moved <a href=\"http://ccm2.rb-net.com/tds/in.htm?wmid=1056898&l=\">here</a>
    Это результат работы функции redirect
    Код (Text):
    +-------------------------------------------------------------------+
    |
    |
    |  NEW: HOST: ccm2.rb-net.com URL: /tds/in.htm?wmid=1056898&l=
    |
    |
    +-------------------------------------------------------------------+
    Котрорая снова таки вызывает функцию Initializate. Это полный ответ на запрос, здесь есть код страницы но нету пропсов..
    Код (Text):
    The URL has moved <a href=\"http://ccm/index.htm\">here</a>
    по этому функция redirect пишет
    Код (Text):
    STROKA OTSUTSTVUET
    Вопрос: Почему их нету???? И как это исправить? :)
     
Загрузка...
Похожие Темы - Сокеты получение кода
  1. areostar
    Ответов:
    1
    Просмотров:
    222
  2. 123456789igor
    Ответов:
    0
    Просмотров:
    924
  3. iosif88

    Сокеты

    iosif88, 17 дек 2009, в разделе: .NET
    Ответов:
    1
    Просмотров:
    1.714
  4. acorn
    Ответов:
    13
    Просмотров:
    4.840
  5. Баламут
    Ответов:
    2
    Просмотров:
    3.123

Поделиться этой страницей