UrlDownloadToFile ... kennt sich jemand aus?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

UrlDownloadToFile ... kennt sich jemand aus?

Beitrag von Xaby »

Ich hatte hier mal geschaut
http://www.purebasic.fr/german/viewtopi ... t&start=10

Aber das war ja nicht das, was ich meinte.

Code: Alles auswählen

DeleteURLCacheEntry_(URL) 
UrlDownloadToFile_(0,URL,DateiAufRechner,0,0)


Wie kann ich schauen, ob eine URL überhaupt gültig ist?

Wo find ich denn mal eine schöne Dokumentation zu den beiden Befehlen und den ,,Verwandten,, von denen?

Gruß, Folker :allright:
Zuletzt geändert von Xaby am 29.09.2006 18:16, insgesamt 1-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Internet und so

Beitrag von Kiffi »

Xaby hat geschrieben:Wie kann ich schauen, ob eine URL überhaupt gültig ist?
Meinst Du jetzt von der Syntax?

so in etwa?

http://www.google.de -> richtig
hxtp://wxw.google -> falsch

Dann kommst Du mit einem regulären Ausdruck am besten hin.

Oder aber meinst Du, ob die Seite im Netzt vorhanden ist?
Das geht nicht mit 100%iger Sicherheit.

Beschreib Dein Problem doch mal ein wenig genauer. Bist ja sonst nicht so
schüchtern ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

>Wo find ich denn mal eine schöne Dokumentation zu den beiden Befehlen und den ,,Verwandten,, von denen?

http://msdn.microsoft.com :twisted:



Ansonsten kann ich dem Thread hier nur hinzufügen, dass

1. die Überschrift nichtssagend ist

2. die ersten 50% des Beitrags nichtssagend sind.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Mmm.

Ne, Syntaxüberprüfung ist ja was anderes.

Aber woher weiß man denn, ob am andern Ende überhaupt was kommt, wenn man nachfragt?


Beispiel:

www.kommtnoch.com/bild1.jpg

Wie kann ich überprüfen, ob es diese Datei gibt, ohne sie erst runterladen zu wollen. Und selbst dann, erzeugt mir der Befehl auch JPEGs die dann so ein paar KB groß sind, auch wenn die Adresse falsch ist.

Und das möchte ich verhindern.

Wie könnte man zum Beispiel BrutForce anwenden auf eine URL?

Gruß, Folker :allright:
Kinder an die Macht http://scratch.mit.edu/
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Xaby hat geschrieben:Wie könnte man zum Beispiel BrutForce anwenden auf eine URL?
Ich sag nur Denial of Service :shock:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Nein, sowas soll es ja genau nicht werden.

Ich würde nur gern schnell schauen, ob eine bestimmte Datei vorhanden ist. ... Nicht unbedingt, ob irgendeine vorhanden ist.

Es kann doch manchmal sein, dass Sich Daten auf einem Rechner ändern. Ich meine, Domains kommen und gehen.

Und wenn man gern was runterladen wollte und den Link in seinen Favoriten hat ... aber wenn man es dann runterladen möchte ... gibt es wohl möglich die URL gar nicht mehr.

Irgendwie verständlich oder mag mir schon wieder keine so recht helfen und lieber nur wieder mich auf irgendwas hinweisen wollen /:->

Dank euch, für eure Hilfe. :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Irgendwie verständlich oder mag mir schon wieder keine so recht helfen
> und lieber nur wieder mich auf irgendwas hinweisen wollen /:->
Kiffi hat geschrieben:Oder aber meinst Du, ob die Seite im Netzt vorhanden ist?
Das geht nicht mit 100%iger Sicherheit.
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

>Wie kann ich überprüfen, ob es diese Datei gibt, ohne sie erst runterladen zu wollen.
Sende doch einfach

Code: Alles auswählen

HEAD /index.html HTTP/1.0
User-Agent: Bruteforce-Attacker 1.0
Connection: Close
An den Server (meist Port 80) und gut ist. Dann bekommst du nämlich nur den Header der Datei, ohne gleich die ganze Datei gesendet zu bekommen. Ist der Code, der dir zurück gesendet wird 200, ist alles OK. Ist er 404, Dann wurde die Datei nicht gefunden.

Sende GET statt HEAD, um Header+Datei (also ganz normal) zu laden.
PUT kann eine Datei hochladen, dazu schauste bei Google, wie's geht. PUT ist aber bei den meisten Servern ausgeschaltet, schließlich ist das eine potentielle Sicherheitslücke.




Einen anderen Weg wird es vermutlich nicht geben, das einzige, was mir einfällt, ist InternetReadFile_().




Ansonsten such bitte selbst, und mach keinen Staatsakt aus der Sache, wie du es in deinen anderen Threads gemacht hast (obwohl ich zugeben muss,dass mich dein Projekt dort doch interessiert mit der Spracherkennung, Videoanalyse, etc.)

Falls du noch mehr Informationen zu dem HTTP-Protokoll benötigst, ich kann dir hoffentlich deine Fragen beantworten, programmiere z. Zt. ja selber nen HTTP-Webserver... :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

ich überprüfe nach dem downlado immer mit filesize()
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

so hier is nun mal nen beispielcode wo du sehen kannst wie man feststellt ob es das file gibt oder nit.

Gib in dem StringGadget einfach ne URL zu nem File an und downloade.
Du wirst sehen das das geht, wenn du jetzt die selbe URL nimmst jedoch die endung des files in der URL weg läst und willst Downloaden bekommst du ne Errormessage da es das File ja so nit gibt.

Hoffe das hilft dir :wink:

Code: Alles auswählen

;# 30.09.2006
;# By Nico Grüner
;# for german purebasic form


#File_Download = 0
#INTERNET_OPTION_CONNECT_TIMEOUT = $2

Procedure DownloadEvents() 
  msg.MSG 
  If PeekMessage_(msg,0,0,0,1) 
    TranslateMessage_(msg) 
    DispatchMessage_(msg) 
  Else 
    Sleep_(1) 
  EndIf 
EndProcedure 

Procedure.s GetQueryInfo(hHttpRequest.l, iInfoLevel.l) 
  sBuffer.s = ""
  lBufferLength.l=0 
  lBufferLength = 1024 
  sBuffer=Space(lBufferLength) 
  HttpQueryInfo_(hHttpRequest, iInfoLevel, sBuffer, @lBufferLength, 0) 
  ProcedureReturn Left(sBuffer, lBufferLength) 
EndProcedure 
Procedure.b DownloadToFile(FileSave.s, URL.s) 
  isLoop.b=1 
  Bytes.l=0 
  fBytes.l=0 
  Buffer.l=524288
  res.s="" 
  Protected tmp.s, queryinfo.s
  tmp="" 
  myMax = 0
  
  OpenType.b=1
  ProxyServer.s = ""
  Bypass.s = ""  
  INTERNET_FLAG_RELOAD.l = $80000000 
  INTERNET_DEFAULT_HTTP_PORT.l = 80 
  INTERNET_SERVICE_HTTP.l = 3 
  HTTP_QUERY_STATUS_CODE.l = 19 
  HTTP_QUERY_STATUS_TEXT.l = 20 
  HTTP_QUERY_RAW_HEADERS.l = 21 
  HTTP_QUERY_RAW_HEADERS_CRLF.l = 22 
  
  mem =AllocateMemory(Buffer) 
  opt_mem=AllocateMemory(4)
  PokeL(opt_mem,10000)
  hInet = InternetOpen_("SkyBeat", OpenType, ProxyServer, Bypass, 0) 
  temp_result_inet = InternetSetOption_(hInet,#INTERNET_OPTION_CONNECT_TIMEOUT,opt_mem,4)
  hURL = InternetOpenUrl_(hInet, URL, #Null, 0, INTERNET_FLAG_RELOAD, 0) 
  If hURL = 0
    MessageRequester("Error", "Unable to load server datas from "+URL+" !",0)
    FreeMemory(mem)
    FreeMemory(opt_mem)
    ProcedureReturn #False
  EndIf
  domain.s = ReplaceString(Left(URL,(FindString(URL, "/",8) - 1)),"http://","") 
  hInetCon = InternetConnect_(hInet,domain, INTERNET_DEFAULT_HTTP_PORT, #Null, #Null, INTERNET_SERVICE_HTTP, 0, 0) 
  If hInetCon > 0 
    hHttpOpenRequest = HttpOpenRequest_(hInetCon, "HEAD", ReplaceString(URL,"http://"+domain+"/",""), "http/1.1", #Null, 0, INTERNET_FLAG_RELOAD, 0) 
    If hHttpOpenRequest > 0 
      iretval = HttpSendRequest_(hHttpOpenRequest, #Null, 0, 0, 0) 
      If iretval > 0 
        tmp = GetQueryInfo(hHttpOpenRequest, HTTP_QUERY_STATUS_CODE)
        queryinfo = Trim(tmp)
        Debug queryinfo
        If Trim(tmp) = "200" Or Trim(tmp) = "400" 
          tmp = GetQueryInfo(hHttpOpenRequest, HTTP_QUERY_RAW_HEADERS_CRLF) 
          If FindString(tmp,"Content-Length:",1)>0 
            ii.l=FindString(tmp, "Content-Length:",1) + Len("Content-Length:") 
            tmp = Mid(tmp, ii, Len(tmp)-ii) 
            myMax = Val(Trim(tmp))
          EndIf 
        EndIf
      EndIf 
    EndIf
  Else
    MessageRequester("Error","No connection found",0)
    FreeMemory(mem)
    FreeMemory(opt_mem)
    ProcedureReturn #False
  EndIf 
  If queryinfo = "404" ;das file gibt es nicht und kann somit nicht geladen werden
    MessageRequester("Info","No file for download found! "+Chr(10)+URL,0)
    FreeMemory(mem)
    FreeMemory(opt_mem)
    ProcedureReturn #False
  EndIf
  
  If myMax = 0 ;das file gibt es nicht und kann somit nicht geladen werden
    MessageRequester("Info","No file for download found! "+Chr(10)+URL,0)
    FreeMemory(mem)
    FreeMemory(opt_mem)
    ProcedureReturn #False
  Else
    SetGadgetAttribute(2,#PB_ProgressBar_Maximum,myMax)
  EndIf
  Result = CreateFile(#File_Download, FileSave)
  If Result = 0
    MessageRequester("Error","Can`t create and save the file "+FileSave,2)
    FreeMemory(mem)
    FreeMemory(opt_mem)
    ProcedureReturn #False
  EndIf
  
  Repeat
    InternetReadFile_(hURL, mem, Buffer, @Bytes) 
    If Bytes = 0 
      isLoop=0 
    Else 
      fBytes=fBytes+Bytes 
      If myMax >= fBytes
        Debug "MyMax = "+Str(myMax)
        Debug "fbytes = "+Str(fBytes)
        prozent.f = (fBytes/myMax)*100
        SetGadgetText(1,Str(fBytes)+" bytes or "+StrF(prozent,1)+"% downloadet")
        SetGadgetState(2, fBytes)
      EndIf 
      WriteData(#File_Download,mem, Bytes) 
    EndIf 
    DownloadEvents() 
  Until isLoop=0 
  InternetCloseHandle_(hURL) 
  InternetCloseHandle_(hInet) 
  SetGadgetState(2,0)
  FreeMemory(mem)
  FreeMemory(opt_mem) 
  ProcedureReturn #True
EndProcedure 

OpenWindow(0,0,0,400,100,"DownloadTest",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
StringGadget(0,5,5,390,20,"")
TextGadget(1,5,30,290,15,"")
ProgressBarGadget(2,5,50,390,15,0,100)
ButtonGadget(3,150,75,100,20,"Download")

Repeat
  Event = WaitWindowEvent(10)
  If Event = #PB_Event_Gadget
    GadgetID = EventGadget()
    If GadgetID = 3
      If GetGadgetText(0) <> ""
        ;nachfolgend evt. den filetyp fürs saven anpassen!!!!
        DownloadToFile("c:\my_app.exe", GetGadgetText(0))
      EndIf
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
Gruß,
Nico
Antworten