Stazeni html stranky – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Stazeni html stranky – C / C++ – Fórum – Programujte.comStazeni html stranky – C / C++ – Fórum – Programujte.com

 

seitec0
Duch
2. 3. 2008   #1
-
0
-

Ahoj,
Chtel bych vas prosim poprosit jestli nemate nekdo zkusenosti s programovanim na webu. Potrebuju vytvorit program v C na stazeni html stranky z webu. Vytvorim socket navazu spojeni se serverem, ale nevim jak bych mel naprogramovat to ze mi ten server posle stranku nebo jak se s tim vyporadat. Nevedel by jste prosim vas nekdo?
Predem diky za kazdy prispevek.

Nahlásit jako SPAM
IP: 88.102.78.–
_k_
Duch
2. 3. 2008   #2
-
0
-

Musis pouzit http. Stiahni si ukazkove prikaldy z tadeto http://www.builder.cz/art/cpp/tcp_klient_linux.html?pos=1 -je tam na to priklad
Ak mas win tak je to dalsi clanok...

Nahlásit jako SPAM
IP: 195.91.54.–
seitec0
Duch
10. 3. 2008   #3
-
0
-

To jsem presne potreboval dik moc. Chtel bych se zeptat plati to obecne pro objekty na webu nebo jenom pro html stranky? Kdych tim chtel stahnou treba nejaky soubor nebo tak. // Odeslání dat
if ((size = send(mySocket, text.c_str(), text.size() + 1, 0)) == -1)
{
cerr << "Problem s odeslanim dat" << endl;
return -1;
}
cout << "Odeslano " << size << endl;
// Prijem dat
text = "";
while (((size = recv(mySocket, buf, BUFSIZE - 1, 0)) != -1) && (size != 0))
{
buf[size] = '\0';
totalSize += size;
text += buf;
}
// Uzavru spojeni
close(mySocket);

Nahlásit jako SPAM
IP: 147.229.193.–
sn3d0
Věrný člen
11. 3. 2008   #4
-
0
-

Da sa povedat ze toto plati obecne pre kazdu komunikaciu TCP/IP.. tam vsak dalej este zalezi aky protokol chces na stiahnutie pouzit, ci FTP, HTTP alebo neviem co.. trosku sa situacia meni ak chces pouzivat SSL.. Trosku mi unika definicia pojmu 'objekty na webu' takze mozno sa nepochopime a napisal som tu nejaku blbost :)

Nahlásit jako SPAM
IP: 213.151.208.–
shutdown -h now
seitec0
Duch
11. 3. 2008   #5
-
0
-

Objektama jsem myslel libovolne soubory, obrazky a tak. Dik za odpoved.

Nahlásit jako SPAM
IP: 147.229.193.–
seitec0
Duch
12. 3. 2008   #6
-
0
-

chtel bych se prosim vas jeste zeptat, kdyz budu chtit stahnout obrazek. Jak bych mohl upravit tento kod aby mi stahoval obecne stranku nebo obrazek? kdyz zadam adresu kde je cil obrazek napise mi chybi ze je spatna adresa.


int stahni(char *filenamee){
string text("GET / HTTP/1.0\nhost: \n\n");
hostent *host; // Vzdaleny pocitac
sockaddr_in serverSock; // Vzdaleny "konec potrubi"
int mySocket; // Soket
char buf[BUFSIZE]; // Prijimaci buffer
int size, totalSize = 0; // Pocet prijatých a odeslanych bytù
ofstream output("./download.html");
// Zjistime info o vzdalenem pocitaci
if ((host = gethostbyname(filenamee)) == NULL)
{
cerr << "Spatna adresa" << endl;
return -1;
}
// Vytvorime soket
if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{
cerr << "Nelze vytvorit soket" << endl;
return -1;
}
// Zaplníme strukturu sockaddr_in
// 1) Rodina protokolu
serverSock.sin_family = AF_INET;
// 2) Cislo portu, ke kteremu se pripojime
serverSock.sin_port = htons(80);
// 3) Nastavení IP adresy, ke ktere se pripojime
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
// Pripojeni soketu
if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
{
cerr << "Nelze navazat spojeni" << endl;
return -1;
}
// Odeslání dat
if ((size = send(mySocket, text.c_str(), text.size() + 1, 0)) == -1)
{
cerr << "Problem s odeslanim dat" << endl;
return -1;
}
cout << "Odeslano " << size << endl;

// Prijem dat
text = "";
while (((size = recv(mySocket, buf, BUFSIZE - 1, 0)) != -1) && (size != 0))
{
buf[size] = '\0';
totalSize += size;
text += buf;
}
// Uzavru spojeni
close(mySocket);
cout << "Prijato " << totalSize << " bytu" << endl << "HTTP Hlavicka:" << endl << endl;
// Rozdelim HTTP odpoved
int offset = text.find("\r\n\r\n");
copy(text.begin(), text.begin() + offset + 2, ostream_iterator<char>(cout,""));
copy(text.begin() + offset + 4, text.end(), ostream_iterator<char>(output,""));
}

Nahlásit jako SPAM
IP: 147.229.193.–
sn3d0
Věrný člen
13. 3. 2008   #7
-
0
-

No totizto u teba je problem ten ze si sa nemrkol na specifikaciu HTTP protokolu. Neviem teda ci vies alebo nevies ako prebieha komunikacia pomocou HTTP protokolu. Totizto ty posles na server poziadavku - request a on ti odpovie - response. Ako vlastne vyzera jednoduchy request napriklad na http://www.nejaka_adresa.sk/images/obrazok_1.png? Ty sa pripojis na www.nejaka_adresa.sk na port 80 a posle sa (najjednoduchsi) request:



GET /images/obrazok_1.png HTTP/1.1
Host: www.nejaka_adresa.sk
User-Agent: Experiment
<prazdny riadok>


Riadok je ukoncovany dvojicou <CR><LF>. Na to ti pride odpoved od servera. Ta sa zacina HTTP hlavickou a nasledne telom. Moze vyzerat nasledovne:



HTTP/1.0 200 OK
Date: Fri, 13 Mar 2008 08:39:47 GMT
Content-Type: image/png
Content-Length: 1354

....


Co teda robi tvoj kod? On sa proste pripoji na nejaku adresu a pozle request:



GET / HTTP/1.0
host:


Cize vlastne je to nejaky taky ekvivalent toho ked napises do prehladaca napriklad z www.moja_adresa.sk cize sa ti zobrazi index.html. KEd si do googla hodis 'HTTP protocol specification' tak ti vyhodi kvantum pouzitelneho materialu.Bohuzial bez studia HTTP protokolu sa neda robit s HTTP protokolom :) Tieto veci si vsak nemusis pracne pisat, uz su napisane. Staci sa pozriet na kniznicu libCURL.

Nahlásit jako SPAM
IP: 213.151.208.–
shutdown -h now
seitec0
Duch
14. 3. 2008   #8
-
0
-

jj tohle je mi uz jasny. Chyba byla v necem jinem. Pri ukladani do text z buf.
buf[size] = '\0';
totalSize += size;
text += buf;
}

Nahlásit jako SPAM
IP: 88.102.78.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 115 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý