Permalänk
Avstängd

Läsa fil från internet i C?

Hej!

Fick för mig att installera Code::Blocks i går och testa lite C. Hittills har jag bara kört lite enkel matematik, läsa filer, fråga användaren och så vidare men jag skulle vilja lära mig att läsa en fil från en annan dator över http eller ftp.

Säg att jag vill läsa http://oeke.shacknet.nu/test.txt . På något sätt går det ju säkert men är det kanske för svårt för en nybörjare som jag?

Svaret kanske är jättenkelt men att googla på C är ju inte det mest ultimata.

Visa signatur

Space, the final frontier

It's not what you've got, it's how you use it, som gamle Ray Stevens sa.

Permalänk
Medlem

Detta blir nog ett relativt stort steg för en nybörjare, om du inte använder dig av något lämpligt bibliotek eller gör systemanrop till program som tankar hem filen.

Jag tror du finner sånt här betyligt lättare med t.ex. Java, vilket jag rekommenderar istället för C.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av Micket
Detta blir nog ett relativt stort steg för en nybörjare, om du inte använder dig av något lämpligt bibliotek eller gör systemanrop till program som tankar hem filen.

Jag tror du finner sånt här betyligt lättare med t.ex. Java, vilket jag rekommenderar istället för C.

Okej, hm, då får jag lösa det på annat vis då.

Håller nog fast vid C ett tag till, om det inte visar sig att det är sjukt svårt att göra vettiga saker.

Visa signatur

Space, the final frontier

It's not what you've got, it's how you use it, som gamle Ray Stevens sa.

Permalänk
Medlem

Använd libCURL eller skriv en egent liten lösning m.h.a. sockets.

Permalänk
Medlem

Lär dig lite HTTP är inte så svårt att skriva request som skickas genom socket.

Det enda du behöver lära dig är:
- GET
- POST

Visa signatur

Stationär: Ubuntu GB DQ6 P35 | Q6600 | 4GB ram Corsair 2*2gb 800mhz (3.5gb) |1tb SATA + 500gb SATA + 250gb SATA | Sparkle 9800gt Passiv
Laptop: Lenovo 3000 v200 | Ubuntu |

Permalänk
Permalänk
Medlem

Länka in urlmon.dll och använd URLDownloadToFile() funktionen jätteenkelt

http://msdn.microsoft.com/en-us/library/ms775123(VS.85).aspx

#include <urlmon.lib> #include <urlmon.h> URLDownloadToFile(NULL, "http://oeke.shacknet.nu/test.txt", "c:\\hemladdat.txt", 0, NULL);

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
Använd libCURL ....

Håller med fullständigt, riktigt bra lib för detta ändamål!

Visa signatur
Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av You
Använd libCURL eller skriv en egent liten lösning m.h.a. sockets.

Hur använder man libCURL då? Eller lib ö.h.t, har jag förstått saken rätt om jag tänker mig sådana där libar som ett gäng instruktioner som man "fuskar" in i programmet?

Citat:

Ursprungligen inskrivet av Delight
Länka in urlmon.dll och använd URLDownloadToFile() funktionen jätteenkelt

http://msdn.microsoft.com/en-us/library/ms775123(VS.85).aspx

#include <urlmon.lib> #include <urlmon.h> URLDownloadToFile(NULL, "http://oeke.shacknet.nu/test.txt", "c:\\hemladdat.txt", 0, NULL);

Hmm, testade att länka till en urlmon.dll men jag får bara error när jag kör build om att urlmon.lib och urlmon.h inte är något som finns och en varning för att URLDownloadToFile inte fungerar.

Jag la urlmon.dll i projektmappen och länkade i Code::Blocks under Build options... > Linker settings.

Alltså jag är helt nybörjare på att koda, jag har bara fixat lite php och sådant innan. Att säga att jag ska "skriva lösningar med hjälp av sockets" är ungefär som att säga "bygg ett avstämt grenrör" till någon som har problem med att fylla på spolarvätska. Biljämförelser ftw

Jag tackar för alla svar, det verkar ju kanske inte längre så avlägset att läsa filer över http.

Visa signatur

Space, the final frontier

It's not what you've got, it's how you use it, som gamle Ray Stevens sa.

Permalänk
Medlem

Jag rekommenderar också libcurl, väldigt enkelt att använda.

Visa signatur

[ Adopt, Adapt and Apply ]

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Thallid
Hur använder man libCURL då? Eller lib ö.h.t, har jag förstått saken rätt om jag tänker mig sådana där libar som ett gäng instruktioner som man "fuskar" in i programmet?

Är inte så svårt. libcurl har en massa dokumentation och hur du använder libraries (bibliotek) kan du läsa om här bland annat.

Edit: libs är egentligen färdigbyggda bibliotek som ditt program kan referera till, antingen genom att kompilera in dess kod eller genom att länka till vissa dll-filer.

Permalänk
Medlem

Jag skrev mitt svar för jag misstänkte att du ännu inte lärt dig hantera och förstå symboler, länkning och allt därtill än.
Jag antar att Code::Blocks döljer denna process från dig väldigt väl också.
Att använda sockets och läsa på HTTP är absolut inte rätt väg att gå. Dessa rekommendationer kommer från programmerare som gillar att återuppfinna hjulet och introducera buggar, då de aldrig kommer göra allt lika säkert och bra som libcurl gör ändå.

Bra programmering omfattar att använda sig av bibliotek när det är lämpligt, och ingen skulle kalla det för att "fuska"
Jag tror du är mogen att läsa på om just länkning:
http://en.wikipedia.org/wiki/Linker
Inte så mycket text, men ack så viktigt. Detta kommer att göra att du faktiskt förstår varför du får ett visst felmeddelande.

Sedan finns det absolut ingen anledning att använda microsoftspecifika urlmon, då det är precis lika enkelt med bibliotek som finns till flera plattformar (libcurl).

För övrigt så vill jag bara säga att jag mår illa när jag ser den här koden...
#include <urlmon.lib>
skall man verkligen göra så? Gud så hemskt bibliotek.

Permalänk

MSVC-kod...

Där finns #include-direktivet.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Micket
Att använda sockets och läsa på HTTP är absolut inte rätt väg att gå. Dessa rekommendationer kommer från programmerare som gillar att återuppfinna hjulet och introducera buggar, då de aldrig kommer göra allt lika säkert och bra som libcurl gör ändå.

Antar att en lämplig fråga till trådskaparen då är vad meningen är: 1) att ladda ner filen eller; 2) att förstå vad som händer.

Beej's Guide to Network Programming finns också, men går inte igenom saker lika grundlig som unp, och använder den del förlegade funktioner som ersatts med nya IPv6-redo alternativ.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Micket
Att använda sockets och läsa på HTTP är absolut inte rätt väg att gå. Dessa rekommendationer kommer från programmerare som gillar att återuppfinna hjulet och introducera buggar, då de aldrig kommer göra allt lika säkert och bra som libcurl gör ändå.

Bra programmering omfattar att använda sig av bibliotek när det är lämpligt, och ingen skulle kalla det för att "fuska"

Att använda sockets och titta på HTTP rfc:n är absolut rätt sätt att göra det på om man faktiskt är intresserad av att lära sig något. Visst, finns massor av libs för det, men vad lär man sig om man endast använder färdiga saker?

Det handlar inte om att skriva perfekt kod det första man gör, utan att få ett hum om hur det faktiskt funkar. När man vet hur det funkar så kan ta ställning till om man vill använda färdiga bibliotek eller skriva en egen lösning.

Problemet med att bara titta på färdiga lösningar är att man blir helt beroende av andras saker och inte klarar av att skriva något själv. När man väl hamnar i en situation där man inte har tillgång till en färdig lösning så kommer man få stora problem, då man saknar den erfarenheten och kunskaperna som krävs för att faktiskt implementera något själv.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem

Just HTTP-protokollet, tillsammans med IRC och POP3, är nog väldigt bra övningar när det gäller att dels implementera något som har en specifikation men även generell nätverksprogrammering.

Permalänk
Avstängd

Hej igen. Har inte haft tid för något kodande i dag men jag har kikat på libCURL och så vidare, men men

Citat:

Ursprungligen inskrivet av cic
Antar att en lämplig fråga till trådskaparen då är vad meningen är: 1) att ladda ner filen eller; 2) att förstå vad som händer.

Beej's Guide to Network Programming finns också, men går inte igenom saker lika grundlig som unp, och använder den del förlegade funktioner som ersatts med nya IPv6-redo alternativ.

Det är definitivt nr 2 jag är ute efter! Att läsa en fil från internet om jag nu skulle tvingas göra det kan jag göra antingen manuellt eller också i php. Men, jag lägger nog filläsandet på hyllan ett tag eftersom jag bara har skrapat lite på c-ytan hittills, att själv skriva kod för http-protokollet är ett för stort steg helt enkelt.

Btw, om någon har några skojiga sidor/uppgifter som är lämpade för en nybörjare så är jag intresserad, det börjar bli lite enformigt med alla dessa konsoll-miniräknare.

Visa signatur

Space, the final frontier

It's not what you've got, it's how you use it, som gamle Ray Stevens sa.

Permalänk
Medlem

Jag säger inte emot lära sig hantera sockets eller överhuvudtaget att programmera en sak för lärandets skull, men jag finner det oftast vara ett större problem att folk inte lär sig använda bibliotek när det är lämpligt.

Och sedan, att testa lite C en kväll, för att sedan gå vidare att köra HTTP över sockets ser jag inte som rätt steg. Ett betydligt lämpligare steg är att lära sig vad kompilatorn och länkaren gör, och vad är då bättre än att använda ett bibliotek?
Jag finner det svårt att tro att Thallid redan har koll på pekare (av alla dess slag), typkonverteringar, länkning, som allt är ofantligt mycket viktigare att kunna innan man börjar på nätverksprogrammering (IMNSHO)

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av Micket
Jag säger inte emot lära sig hantera sockets eller överhuvudtaget att programmera en sak för lärandets skull, men jag finner det oftast vara ett större problem att folk inte lär sig använda bibliotek när det är lämpligt.

Och sedan, att testa lite C en kväll, för att sedan gå vidare att köra HTTP över sockets ser jag inte som rätt steg. Ett betydligt lämpligare steg är att lära sig vad kompilatorn och länkaren gör, och vad är då bättre än att använda ett bibliotek?
Jag finner det svårt att tro att Thallid redan har koll på pekare (av alla dess slag), typkonverteringar, länkning, som allt är ofantligt mycket viktigare att kunna innan man börjar på nätverksprogrammering (IMNSHO)

Citat:

Ursprungligen inskrivet av Thallid
Hej igen. Har inte haft tid för något kodande i dag men jag har kikat på libCURL och så vidare, men men

Det är definitivt nr 2 jag är ute efter! Att läsa en fil från internet om jag nu skulle tvingas göra det kan jag göra antingen manuellt eller också i php. Men, jag lägger nog filläsandet på hyllan ett tag eftersom jag bara har skrapat lite på c-ytan hittills, att själv skriva kod för http-protokollet är ett för stort steg helt enkelt.

Visa signatur

Space, the final frontier

It's not what you've got, it's how you use it, som gamle Ray Stevens sa.

Permalänk
Medlem

Jo jag såg faktiskt ditt inlägg, men jag svarade för att försvara mig mot MagnusL+andra om varför jag står fast vid mitt tidigare inlägg, även om du är ute efter att lära dig programmering.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av Micket
Jo jag såg faktiskt ditt inlägg, men jag svarade för att försvara mig mot MagnusL+andra om varför jag står fast vid mitt tidigare inlägg, även om du är ute efter att lära dig programmering.

Aha, okej!

Visa signatur

Space, the final frontier

It's not what you've got, it's how you use it, som gamle Ray Stevens sa.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MagnusL
Att använda sockets och titta på HTTP rfc:n är absolut rätt sätt att göra det på om man faktiskt är intresserad av att lära sig något. Visst, finns massor av libs för det, men vad lär man sig om man endast använder färdiga saker?

Det handlar inte om att skriva perfekt kod det första man gör, utan att få ett hum om hur det faktiskt funkar. När man vet hur det funkar så kan ta ställning till om man vill använda färdiga bibliotek eller skriva en egen lösning.

Problemet med att bara titta på färdiga lösningar är att man blir helt beroende av andras saker och inte klarar av att skriva något själv. När man väl hamnar i en situation där man inte har tillgång till en färdig lösning så kommer man få stora problem, då man saknar den erfarenheten och kunskaperna som krävs för att faktiskt implementera något själv.

Varför skall man använda färdiga funktioner för sockets när man kan skriva en egen TCP/IP-stack? Eller varför använda ett befintligt operativsystem? Jo, nånstans måste man begränsa sin inlärning. Det går inte att lära sig allting samtidigt, utan man måste ta en bit i taget. Om man kan C relativt bra så kanske det är en idé att titta närmare på RFC:n för HTTP. Men knappast i det här sammanhanget.

Permalänk
Medlem

ser man det i ett mer industriellt perspektiv så är det fel att implementera funktionalitet som andra redan ordnat. uppfinn inte hjulet igen. RFC:n är kul att läsa, bra att kunna, men slösa inte tid på att implementera den. då kan du lika gärna göra ett eget protokoll.