Promocja językowa LINGO

Pobieranie źródła strony

Jeśli masz problem związany z innym zagadnieniem, tutaj możesz szukać odpowiedzi

Moderator: Moderatorzy

Pobieranie źródła strony

Postprzez KILLER[PL] So gru 06, 2008 21:23 pm

Nie jest to problem zbytnio związany z samym C++ więc umieszczam go w tym dziale. Otóż mam taki oto program do wysyłania zapytań przy pomocy Socketów:
Kod: Zaznacz cały
#include <windows.h>
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
     struct sockaddr_in addr;
     struct hostent *hostEnt;
     
    int port;
     WORD wersja;
     WSADATA WsaData;
     SOCKET socketMoj;
    char* hostname = new char[255],
       * page = new char[255],
       * protokol = new char[64];
    string tresc;
    char odp[20000] = {'\0'};

    cout <<"Podaj tresc zapytania:\n";
    cin.getline(page, 255);

    cout <<"Podaj nazwe hosta:\n";
    cin.getline(hostname, 255);

    cout <<"Podaj port:\n";
    cin >> port;
   
    char r = '\r';
    char n = '\n';

    for(unsigned int i = 0 ; i <= strlen(page) ; ++i )
    {
       if( page[i] == ',' )
          page[i] = r;
       if( page[i] == ';' )
          page[i] = n;
    }
    tresc += page;

   system("CLS");

     wersja = MAKEWORD(2, 0);
     
     if (WSAStartup(wersja, &WsaData)) {
           cout << "Blad inicjalizacji WinSock2\n";
         _getch();
           return 0;
     }

     if (!(hostEnt = gethostbyname(hostname))) {
           cout << "Nie znaleziono hosta.\n";
         _getch();
           return 0;
     }
     
     addr.sin_family = AF_INET;
     addr.sin_port = htons(port);
     addr.sin_addr.s_addr = *((unsigned long*)hostEnt->h_addr);

     socketMoj = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     connect(socketMoj, (struct sockaddr*)&addr, sizeof(addr));
     
     send(socketMoj, tresc.c_str(), 4, 0);

    cout << "Wyslano do "<< inet_ntoa(addr.sin_addr) <<" :\r\n" << tresc.c_str() << "\r\n\r\n";

     cout << "Czekam na odpowiedz..." << endl;
     
     recv(socketMoj, odp, sizeof(odp), 0);

     cout << "Oto odpowiedz: \n" << odp;

   
    closesocket(socketMoj);
   
     WSACleanup();
    delete hostname;
    delete protokol;
    delete page;
     _getch();
     return 0;
}
I teraz wszystko fajnie tylko, że nie wiem jak sformułować zapytanie. Chcę dostać w odpowiedzi źródło strony. (połączenie znaków ",;" wkleja w to miejsce potem "\r\n" potrzebne do przejścia do nowej linii w zapytaniu ;) ) Próbowałem tak:
GET / HTTP/1.1,;Host: http://www.google.com,;,;
Ale dostaje pustke w odpowiedzi :( Prosze pomóżcie,
Pozdro

EDIT:
Postanowiłem zmienić troche kod tak aby wysyłał on konkretne zapytanie... Teraz wyglada on tak:
Kod: Zaznacz cały
#include <windows.h>
#include <iostream>
#include <conio.h>

#pragma comment(lib, "ws2_32.lib")

#define PORT 80
#define HOST "www.fotka.pl"

using namespace std;

int main(int argc, char **argv)
{
    cout <<"Trwa inicjalizacja zmiennych..."<<'\n';
     struct sockaddr_in addr;
     struct hostent *he;
     
     WORD      RequiredVersion;
     WSADATA   WData;
     SOCKET    s;

     char      tresc[] = "GET / HTTP/1.1\r\n"
                         "Host: www.fotka.pl\r\n"
                         "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)\r\n"
                         "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,t  ext/plain;q=0.8,image/png,*/*;q=0.5\r\n"
                         "Accept-Language: pl\r\n"
                         "Accept-Encoding: gzip,deflate\r\n"
                         "Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7\r\n"
                         "Keep-Alive: 300\r\n"
                         "Connection: keep-alive\r\n\r\n";

     char      odp[200000] = {'\0'};
     
     cout <<"Inicjalizacja zmiennych zakonczona..."<<'\n';
     cout <<"Trwa inicjalizacja WinSock2..."<<'\n';

     RequiredVersion = MAKEWORD(2, 0);
     
     if (WSAStartup(RequiredVersion, &WData))
     {
           cout <<"Blad inicjalizacji WinSock2\n";
           _getch();
           return 0;
     }
     
     cout <<"Inicjalizacja WinSock2 zakonczona..."<<'\n';
     cout <<"Trwa znajdowanie hosta..."<<'\n';

     if (!(he = gethostbyname(HOST)))
     {
           cout <<"Nie znaleziono hosta.\n";
           _getch();
           return 0;
     }
     
     cout <<"Znaleziono hosta pomyslnie..."<<'\n';
     cout <<"Trwa wypelnianie struktury..."<<'\n';
     
     addr.sin_family = AF_INET;
     addr.sin_port = htons(PORT);
     addr.sin_addr.s_addr = *( (unsigned long*)he -> h_addr);
     
     cout <<"Wypelnianie struktury skonczone..."<<'\n';
     cout <<"Trwa tworzenie socketa..."<<'\n';

     s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     
     cout <<"Tworzenie socketa skonczone..."<<'\n';
     cout <<"Trwa poloczanie..."<<'\n';
     
     connect(s, (struct sockaddr*) &addr, sizeof(addr));
     
     cout <<"Poloczono..."<<'\n';

     system("CLS");

     send(s, tresc, sizeof(tresc), 0);
     cout << "Wyslano: " << tresc << " do " << inet_ntoa(addr.sin_addr) << "..." << endl;
     cout << "Czekam na odpowiedz..." << endl;
     
     int numer = 1;
     
     while(!kbhit())
     {
     recv(s, odp, sizeof(odp), 0);
     cout << odp ;
     memset(odp, '\0', sizeof(odp));
     cout <<"\n\nKoniec pakietu numer: "<<numer<<" Buf teraz rowna sie = \""<<odp<<"\"\n\n";
     ++numer;
     }
     
     cout <<"Zakonczono."<<'\n';
   
     WSACleanup();
     
     system("CLS");
     
     getch();
     return 0;
}
Dla takiego pakietu wysylanego otrzymuje odpowiedz w formie czterech odebranych pakietów:
HTTP/1.1 200 OK

Date: Sun, 07 Dec 2008 08:55:34 GMT

Server: Apache

Keep-Alive: timeout=45

Connection: Keep-Alive

Transfer-Encoding: chunked

Content-Type: text/html; charset=utf-8

Set-Cookie: cresist=AC15009F00000050; path=/

Content-Encoding: gzip



2324

‹;44|¸ŃC†€!ĹýGučYfňÃŹFßę<ƒ…ÄQşą±N˛x
Vůęá@›ĂK–5Q˘ŰzLäžC*í¨×ýřRŢČÖD0˜řl˝éăđµwş{ŇÝJ¦ôtłG­˛mNŚ]bWwV˛gţLÜ©z ČrɸҘ“ĎČJě
yÍśŐe‹ÁnM`‹šuC>ťYď¬!ăK®ĚGX"ś Ě%ť˜Ň˛€‘¤©{­ľtußk‚Dh–i~ŻD«Ű'EęđŘ]ůŢ'FĄbyž©vň›-Ëźě©ëúÉ ‚ł BŤrFوŔ_9>lL[ÚĆł—ëFŘßű1…¸żęÇh )ĚÓg<nfl-ů÷Üz0ôÎ~L}…Ľ?,š–¤cůĎß~Mý?ˆˇ°MÓ‚cńŹŻľ¦ňc˜Âƒ?†Kł±řçoż¦ţëëëC
n—ţăňóř
Ż
ľć-~’ńÓ7č^|MŐ?Dá6Á!Á‡0'ݵ›ÚĆ‹÷˙éW0˙]w(łJ@˱őoľ¦÷)ˆď8ţX÷Ă›Ż©;mĘk4Ý=ţŻVÜ˙śysÜfAq¤ÚFMîn#| R&AęôĚş!ü)¨ I )öJŃPhÝ“UË,®×´7*Ý•ďŐŔ¤$ÎM°Bjd´, üfËúŹy˜Z•$/Sbů®76óĺűŻÉÁŹ˙čîÁî=V˙đć‹î]ÓBŽÓ7Ö®ń5U猇deĺ
·Ţ|MÝeŰd„,Ťe/ľ¦ęƒŰó‚ŕbă±ř—ďżć˘F \‘ĆúźŢ}Qj
]BJJmÓôß çeÁ׼EÁ[ś±eßzăOᆭö çX˘Ť—mk,ţŮË˙jőýĎ™7ÇmGA¦mÔäî6— »»˝˙ť¨mÚ\u˜Y7ę~ňî' )ޘ™:άw@Č8Â<ĐL)SZ0"yüř˝€=|Ż I Y¦ů˝šěصH^„Äy Q|!4p5|¬xĽ[bËŹLµ–/lu4±7rx™łşl1@M™Vĺ%9ŚWŮş!ßż­ţs˘A)Š-ƒ<&ů˘Ô¸ę×Ďďň\ţĆĚ3tŚN™Á1Dťőű}0+ÖD`Yî’cyKŹ×MM‰ĚQ•@ŔQµ)Ńu˝¨J,ź;~^łůŻđ^řiÎPKň¬ťýűú9/űý“ŽBÁxŰHݧđţ†Ý˙Nüď쮼2 *ĂTvý÷ö}%<"wßb°…`¶ĺǧ^ čh%üń±ć˛‚řŮXÄqI`Ů‚×5ě%gůe?.1Ęa
2†@ÔV5„đßÓŘń_‘XČS˜ă<’ĆPÎĘś` Ŕ_w·éô†/ű¶R*+%˙ŕDšť2©čťć¶Ż,?¸˙
%ˆdÓű`9˛î†J>ßIĆőT‘ŃLŽ\rlyźCÖćđţW§!ö%č‡rŰłćţ7čtٲňý°R,4“#——] ňˇä*šćŘ1%T?#ţîoňI`äDGšüS±i»lkY&ÝŐ”éä˘:žâá§š0'ÓŞ¬%ĄŞ•/3ťĽ ł˘6âˆ`D§Ó±–ݡŠC4yÁeÇ‘ń HY
Á ŁÓĽŮ¶-Ó–ĄFÉű+ë.ŻH×Ti 9GmÔJŕîő6]Órd¶GU
ďoŢŮĎ5e¸G}ÇÉu–ÝĄgexŇq×6,G÷7UQNV-»+ŇĄcČsJH㩺%{顮–wĹ`WÂ5
Şoą}ő;a[K+®ÜŤc–Á
đ°•ćăčŹl×ěŽđjz圥ei÷q%“ú¤<ŮćRygY7mˇ»,Ó>Ľla=ÉŹ˝¬<<a¨%ĄÚ_p˙ëôîŰ;DX˛Żô焳HŐOöő䫲ß˙FN¦çŻ,›rOîoú~ÓL,KĚOaĘ
˜O"ľ˛Ľ"›ťÂŚÝ˙ĆÝŻMň°lzŞJćĹ#ňîŞĘ+ś"™W™ľż†¶i©ëžĆ˛ĺäVŰ–ŮLY;
':Ί)ƒą˙–Ý˙ÎôXÇ6eGY%r®ĺ›Ë]ŻßýMt˙[“\ů¶*úőš śD“#ĺ=•{÷ż
§WČ1W$˘÷żÍž—%¦83ë†@ň'É‹J
Czy ten pakiet jest zaszyfrowany czy może musze coś zrobić ? Interesuje mnie też, co zrobić z tą linijką:
Set-Cookie: cresist=AC15008300000050; path=/
Help :wink: Pozdro

EDIT2:
Problem rozwiązany :) Sformułowałem zapytanie tak:
GET /profil/xxx HTTP:/1.1\r\nHost: http://www.fotka.pl:80\r\n\r\n
I odesłał mi źródło strony konta xxx :wink: (nie usuwam tematu bo ktoś może mieć podobny problem kiedyś...) :mrgreen:
Avatar użytkownika
KILLER[PL]
zaawansowany
zaawansowany
 
Posty: 221
Dołączył(a): Pn sty 28, 2008 18:42 pm

Powrót do Inne

Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 0 gości

cron
ręceprecz odtybetu | Programista PHP | Pozycjonowanie www | Seo link directory | Pozycjonowanie Częstochowa | wizy do rosji | wizy do uzbekistanu