Page 1 of 2 1 2 LastLast
Results 1 to 15 of 18

Thread: download bestanden via http en listbox

  1. #1

    Post download bestanden via http en listbox

    Beste lezer,

    Ik wil een update programma maken om bestanden te downloaden
    dit kan niet via ftp daarom moet het via http

    mijn vraag is nu hoe kan ik meerdere bestanden downloaden

    via http

    kan idhttp 1 hele map van het internet downloaden bijv. http://www.test.nl/download/*.* dit werkt niet

    kan idhttp een map uit lezen?

    of hoe kan ik idhttp een lijst uit een listbox uit lezen.
    graag een voorbeeld met code

    dank u.

  2. #2
    Of het werkt hangt nogal af van de serverconfiguratie, maar je kan het volgende proberen.
    - Download www.test.nl/download/
    - Je hebt nu HTML opgehaald, en je kan daar dus de links uit parsen.
    - Iedere link behalve .. kan je downloaden

    Op sommige servers (zoals de mijne) krijg je bij stap 1 echter geen lijst met bestanden maar een 403 Forbidden terug. In dat geval gaat het niet lukken.

    (en voorbeeld code geef ik alleen voor zeer specifieke vragen, ik ga niet jouw hele probleem oplossen )
    It's just that nothing seems worth saving

  3. #3
    Code:
    var
      Stream: TFileStream;
    begin
    
    Stream := TFileStream.Create('',
        fmCreate or fmShareExclusive);
      try
        idhttp.Get('http://192.168.1.201/download/patch3/',Stream);
      finally
        Stream.Free;
        end;
    dit werkt niet

    hoe kan ik dan een listbox uit lezen?
    Last edited by GolezTrol; 20-Sep-09 at 12:15.

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    die listbox is toch een onderdeel van je HTML. Waarom zou je die uit willen halen?
    Kortom, welke informatie wil je gaan ontvangen?
    Delphi is great. Lazarus is more powerfull

  5. #5
    Quote Originally Posted by jkuiper View Post
    die listbox is toch een onderdeel van je HTML. Waarom zou je die uit willen halen?
    Kortom, welke informatie wil je gaan ontvangen?
    ik wil geen html uit lezen /downloaden

    ik wil updates downloaden zoals .zip/.rar/exe

    dus meer bestanden downloaden bij voorbeeld 5 zips

  6. #6
    Quote Originally Posted by newbie1 View Post
    Code:
    var
      Stream: TFileStream;
    begin
     
    Stream := TFileStream.Create('',
        fmCreate or fmShareExclusive);
      try
        idhttp.Get('http://192.168.1.201/download/patch3/',Stream);
      finally
        Stream.Free;
        end;
    dit werkt niet
    Je zal ook een bestandsnaam moeten meegeven die je wil downloaden, nu doe je dat niet
    hoe kan ik dan een listbox uit lezen?
    Een Listbox heeft een property Items, die gebruik je daarvoor
    Last edited by GolezTrol; 20-Sep-09 at 12:16.
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  7. #7
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Ik ben bang dat newbie1 niet helemaal begrijpt hoe het HTTP-protocol werkt.

    Voor de duidelijkheid: HTTP is geen bestands-overdracht-protocol zoals bijvoorbeeld
    FTP dat is, waarbij een bepaalde mappen-/bestanden-structuur kan worden uitgelezen
    of gemanipuleert en bestanden daadwerkelijk kunnen worden overgezonden.
    Daarom staat FTP ook voor "File Transfer Protocol": een lijst met bepaalde "afspraken"
    (het "Protocol") die afspreekt hoe bestanden (en map-structuren) overgezonden
    moeten worden tussen twee entiteiten.

    HTTP, aan de andere kant, staat voor "Hyper Text Transfer Protocol", waarin staat
    beschreven hoe data (van het type Hyper-Text, ook wel "HTML" genoemd) moet
    worden opgevraagd en moet worden beantwoord.

    Om deze twee verschillen duidelijker te maken, even een voorbeeld (ik laat evt.
    authorisatie hier buiten beschouwing):

    In geval van FTP:
    1. Er wordt eerst een verbinding opgezet door een client, welke geopend dient
      te blijven, totdat een van beide partijen de verbinding verbreekt.
    2. De client vraagt een lijst met bestanden op bij de server, ongeveer zoals het DOS-
      commando "DIR".
    3. De server beantwoord dit verzoek met een lijst bestanden en mappen.
    4. Indien gewenst kan de client besluiten van map te wisselen (en dan naar stap 2)...
      OF
    5. De client kan een bestand opvragen (downloaden)
    6. Zodra de client klaar is met zijn ding, kan de verbinding gesloten worden of
      teruggaan naar stappen 4 of 5
    Nu komt HTTP:
    1. De client maakt verbinding met een bepaalde server en vraagt een resultaat op,
      afhankelijk van wat het pad achter de domeinnaam (of IP-adres) aangeeft
    2. Afhankelijk van hoe de server configuratie is, geeft de server antwoord en wordt
      de verbinding weer verbroken
    Het is hier inderdaad wel erg kort door de bocht, maar in feite gebeurd er niet
    veel meer dan dit.

    Bij HTTP moet je dus van tevoren weten wat je op wilt vragen: een "DIR"-
    commando oid bestaat simpelweg niet voor HTTP.

    Als je dus voor het eerst de webserver bezoekt, doe je dit door het domein- of
    IP-adres op te geven in je adresbalk van je browser en op "Go" te drukken.
    Het is vervolgens aan de server om op dit verzoek een goed antwoord te geven.

    Als je dus intikt: http://www.nldelphi.com/ dan zal de webserver dit verzoek ontvangen
    en gaat vervolgens in zijn setup kijken wat hij met dit verzoek moet doen.

    In de configuratie staan (bijvoorbeeld) de volgende regels:

    Als er geen dingen na de domeinnaam komen (dus na nldelphi.com/):
    1. Zoek eerst naar een pagina genaamd "index.htm"
    2. Indien niet gevonden: zoek naar "index.html"
    3. Indien niet gevonden: zoek naar "index.php"
    4. Indien niet gevonden: geef foutmelding "404 Not Found"
    Gelukkig bestaat de pagina genaamd "index.php" wel, dus komt hij in dit
    geval niet bij stap 4 uit en behandeld hij het PHP-script uit regel 3.

    Dit script geeft vervolgens HTML-data terug in de vorm van de NLDelphi-home-page.

    "Maar", zul je zeggen... "Hoe kan het dan dat ik bij diverse websites of pagina's
    dan wel een soort directory-listing krijg, zoals bijvoorbeeld hier?"


    Dat komt omdat (ik) die server zo ingesteld heb dat als hij bij stap 4 belandt (in
    mijn vorige lijstje) hij geen "404 Not Found"-fout teruggeeft, maar zelf een HTML-
    pagina aanmaakt en terugstuurt waarin alle mappen en bestanden als een soort
    directory-listing staan; kijk maar eens naar de source (rechter muisknop-"View Source")
    van die pagina en je zult zien dat het gewoon HTML is.

    Om kort te gaan: het is dus gewoon een HTML-pagina, maar dan door de server
    zelf gemaakt; het is alleen aan de administrator van de server om dit zo in te stellen
    of niet (of om gewoon een "403 Forbidden" of andere foutmelding terug te sturen).

    Als je dus alle bestanden van zo'n pagina in een ListBox zou willen zetten (om eventueel
    later te kunnen downloaden), dan moet je het resultaat dus gewoon parsen en
    alle links uit de HTML moeten filteren...

    "Maar wat nou als er wel een index-pagina bestaat of script uitgevoerd wordt
    bij mijn aanvraag... hoe kan ik dan achter alle bestanden in die "Map" komen?
    Ik krijg tenslotte een pagina terug en kan geen "DIR" oid doen..."

    (Dit was je oorspronkelijke vraag...)

    Het antwoord hierop is: niet

    Deze pagina bijvoorbeeld geeft namelijk het resultaat van een PHP-script terug,
    terwijl er echt nog meer bestanden in die map staan, zoals bijvoorbeeld dit plaatje
    dat ik vandaag maakte voor jkuiper, maar je zult hier nooit achter kunnen komen,
    als ik je die link niet geef (of je moet toevallig in kunnen loggen op mijn FTP, natuurlijk)

    Uiteraard ligt de werkelijkheid iets genuanceerder, maar het is dus niet mogelijk
    om achter alle bestanden in een "Map" te komen als dit niet in de configuratie
    van de server zo staat ingesteld.

    Ik zou zelfs (en je ziet dit nogal eens op wazige websites uit Rusland) een nep-pagina
    neer kunnen zetten met links naar niet bestaande bestanden, die niet van "echt"
    te onderscheiden is, maar je in werkelijk doorstuurt naar een virus of reclame als
    je op die link drukt...

    Maar krijg je wel keurig een geldige lijst terug, dan moet je net als iedere andere
    webpagina, de links uit de HTML filteren en in je listbox opslaan.


    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  8. #8
    Ik weet de bestands namen die IDHTTP moet downloaden, dus kan ik toch in een txt bestand zetten en dan door idhttp in een listbox streamen en dan laten downloaden?

    De host ondersteunt geen anonieme inloggers op me ftp, en niet meer dan 4 verbindingen via ftp dus het moet wel via http gaan.

    Samen gevoegd:

    IDHTTP leest versie.txt, zet deze in een listbox en downloadt de bestanden die in mijn listbox staan als link.

    Dat moet toch kunnen?
    Last edited by GolezTrol; 20-Sep-09 at 12:13.

  9. #9
    Gewoon Get van idhttp aanroepen, al dan niet naar een stream die je een bestandsnaam geeft.
    Daarna is het maar een kwestie van dat bestand in te lezen met de listbox.
    Waarom wil je daarvoor een listbox gebruiken?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  10. #10
    Quote Originally Posted by Henkie View Post
    Waarom wil je daarvoor een listbox gebruiken?
    omdat het meer dan 1 bestand is die idhttp moet downloaden
    Last edited by GolezTrol; 20-Sep-09 at 12:13.

  11. #11
    Dan roep je meermaals Get aan.
    Waar zie je een probleem?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  12. #12
    Quote Originally Posted by Henkie View Post
    Dan roep je meermaals Get aan.
    Waar zie je een probleem?
    Delphi Code:
    1. var
    2.   Stream: TFileStream;
    3. begin
    4.  
    5. Stream := TFileStream.Create(listbox1.Items[listbox1.ItemIndex],
    6.     fmCreate or fmShareExclusive);
    7.   try
    8.     idhttp1.get('',Stream);
    9.   finally
    10.     Stream.Free;
    11.     end;
    dit werkt niet krijg de melding list index out of bounds (-1)

    hoe laat ik idhttp zeggen dat ie de lijnen moet afgaan dus met count maar hoe?
    Last edited by GolezTrol; 20-Sep-09 at 12:13.

  13. #13
    Veel kans dat itemIndex nog op -1 staat

    Wat je moet doen is:
    1) Maak een for-loop die gaat van 0 tot AantalItems-1
    2) Voor ieder item in die loop, roep Get aan (met url en niet '' zoals je nu doet)
    3) Verwerk nadien alle bestanden die je binnengehaald hebt
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  14. #14
    Zou je me een klein voor beeldtje willen geven want snap niet helemaal.

    bedankt
    Last edited by GolezTrol; 20-Sep-09 at 12:14.

  15. #15
    1+1=b

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •