Seite 1 von 2
Internetseite text auslesen
Verfasst: 29.04.2005 17:33
von zigapeda
Hallo
habe eine frage: Wenn ich von einer bestimmten Internetseite eine Zahl auslesen will wie mache ich das? Ich möchte aber nur die URL und eine Variable verwenden und nicht irgendetwas mit URLDownloadtofile oder so.
Verfasst: 29.04.2005 23:41
von zigapeda
Habe noch eine frage und zwar wie kann ich nur eine URL aufrufen ohne das die seite irgendwo angezeigt wird? Gibt es irgend welche libs oder so?
Verfasst: 30.04.2005 00:14
von Icke
Präzisiere mal mit Beispiel, ich weiss nicht was du meinst.
Verfasst: 30.04.2005 01:27
von zigapeda
ich kann eine zahl/Wert ausgeben, die/der von einer anderen zahl/Wert abhängt. Die zahl/wert kann ich mit php aus der url auslesen.
Ein beispiel:
Ich möchte ein String MD5 Verschlüsseln dann geb ich die url von meinem php script ein, dann ein ? und dann die variable:
[url]http:zigapeda.funpic.de/md5.php?wort=hallo[/url] jetzt möchte ich nur die eine zeile auslesen und das ohne die seite runter zu laden und danach wieder zu löschen usw. das soll im hintergrund passieren ohne das der user etwas mitbekommt.
Und zu meiner zweiten frage ich habe ein phpscript das eine Textdatei erstellt und zwar auch wieder mit variablen die in der url bestimmt werden. um das zu machen brauch ich aber kein webgadget weil eigentlich muss ich ja nur die url aufrufen aber nicht die seite anzeigen.
Verfasst: 30.04.2005 13:21
von MLK
diesen code kannst du dir ja anpassen (speziell "space($FFF)") und zu ner prozedur machen. am besten nachdem du das script angepasst hast, dann sparst du ein paar bytes und kannst den wert den du brauchst leichter herausfischen.
Code: Alles auswählen
Server$ = "zigapeda.zi.funpic.de"
ScriptPath$ = "/md5.php"
PostData$ = "wort=hallo"
If InitNetwork() = #False : Debug "can't init network!" : Else
ServerID = OpenNetworkConnection(Server$, 80)
If ServerID = #False : Debug "can't connect to '" + Server$ + "' !" : Else
Request$ = "POST " + ScriptPath$ + " HTTP/1.1" + #CRLF$
Request$ + "Host: " + Server$ + #CRLF$
Request$ + #CRLF$
Request$ + PostData$ + #CRLF$
SendNetworkString(ServerID, Request$)
Response$ = Space($FFF)
ReceiveNetworkData(ServerID, @Response$, Len(Response$))
CloseNetworkConnection(ServerID)
MessageRequester("", Response$)
EndIf
EndIf
bei der geschichte mit der textdatei musst du halt nur das script aufrufen ohne auf antwort vom server zu warten.
Verfasst: 30.04.2005 16:56
von zigapeda
MLK hat geschrieben:diesen code kannst du dir ja anpassen (speziell "space($FFF)")[...]
Wie meinst du das anpassen was muss ich da reinschreiben?
Verfasst: 30.04.2005 18:13
von MLK
zigapeda hat geschrieben:MLK hat geschrieben:diesen code kannst du dir ja anpassen (speziell "space($FFF)")[...]
Wie meinst du das anpassen was muss ich da reinschreiben?
Du rufst ja ein Skript auf. Dieses hast du wahrscheinlich selber geschrieben, weswegen du auch wissen wirst was es für eine Datei erzeugt und wie groß ihr Inhalt ist. Dieser Inhalt, mit ihrer bekannten größe, wird nach deiner Anfrage als Antwort an dich zurückgeschickt. Der Buffer der diese Antwort entgegennehmen soll (Response$), muss also groß genug sein um diese Antwort inklusive Header (wie groß dieser ist musst du selber nachschauen) entgegennehmen zu können. An dieser Stelle kannst du halt durch anpassung der Größe dieses Buffers etwas optimieren.
Die benötigte Gesamtgröße ergibt sich aus der Größe des Headers..
Code: Alles auswählen
HTTP/1.1 200 OK
Date: Sat, 30 Apr 2005 15:54:32 GMT
Server: Apache
X-Powered-By: PHP/4.3.11
Content-Length: 201
Content-Type: text/html; charset=ISO-8859-1
..und der Größe dessen was dein Skript zurückgeliefert.
Momentan beläuft sich diese Größe auf, wie man im Header nachlesen kann: [Content-Length:] 201 (Bytes).
Wenn du dein Skript jetzt dahingehend änderst, dass es wirklich nur den MD5-Wert zurückliefert, ohne den unnötigen HTML-Kram, dann wird sich diese Größe noch verringern und die Geschwindigkeit des Abrufes erhöhen.
Ändere also das Skript, finde dann heraus wie groß der Buffer sein muss um die Antwort vom Server entgegenzunehmen und ändere den Code dementsprechend.
Wenn es dir aber nicht auf Geschwindigkeit und Anpassung ankommt, dann kannst du auch folgendes machen:
Code: Alles auswählen
Buffer$ = Space($FF)
Repeat
inLen = ReceiveNetworkData(ServerID, @Buffer$, Len(Buffer$))
Response$ + Left(Buffer$, inLen)
Until inLen < Len(Buffer$)
Verfasst: 01.05.2005 00:16
von zigapeda
Ok der code funktioniert aber ich hab ein problem mit mehreren variablen. normal muss ich doch die eine variable mit der anderen verknüpfen und das mit einem "&" oder?
Verfasst: 01.05.2005 11:50
von zigapeda
Also ich hab jetzt eine Prozedur erstellt aber sie funktioniert nicht. Es kommt immer ein Serverproblem also bei OpenNetworkConnection(Server$, 80). Der ganze Code sieht so aus:
Code: Alles auswählen
Procedure.s loadurl(Server$, ScriptPath$, PostData$)
If InitNetwork() = #True
ServerID = OpenNetworkConnection(Server$, 80)
If ServerID = #True
Request$ = "POST " + ScriptPath$ + " HTTP/1.1" + #CRLF$
Request$ + "Host: " + Server$ + #CRLF$
Request$ + #CRLF$
Request$ + PostData$ + #CRLF$
SendNetworkString(ServerID, Request$)
Response$ = Space($FFF)
ReceiveNetworkData(ServerID, @Response$, Len(Response$))
CloseNetworkConnection(ServerID)
pos1=FindString(Response$,"<body>",0)+6
pos2=FindString(Response$,"</body>",pos1)
Response$=Mid(Response$,pos1,pos2-pos1)
ProcedureReturn Response$
Else
ProcedureReturn "Serverproblem"
EndIf
Else
ProcedureReturn "Netzwerkproblem"
EndIf
EndProcedure
Debug loadurl("zigapeda.zi.funpic.de","/md5.php","wort=hallo")
@zigapeda
Verfasst: 01.05.2005 12:39
von jear
Du fragst
also müsste die ServerID gleich 1 sein, denn das ist der Inhalt der Konstanten #True.
Fage mal
damit fragst Du ob die ServerID ungleich null ist und es klappt hervorragend!