Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249470 (10906)

| Suchen
| Zurück zur Übersicht

Autor | Thema: HTTP Requests...
Hansen Hawk
| Datum:09.09.01 19:10 (webmaster@urlsubmitter.de) |
...um meinen URLSubmitter als "richtige Software" umsetzen zu können benötige ich die Möglichkeit HTTP Request direkt aus dem Programm senden zu können, und natürlich auch die HTTP Responsecodes auslesen zu können. Erste Wahl bei der Programmierspreache wäre aufgrund der multimedialen Möglichkeiten und der Tatsache das ich darin schon eine Weile programmiere wäre schon Profan, aber ohne die oben erwähnten Fähigkeiten lässt sich das Problem einfach nicht umsetzen. Wer weiss Rat ? HH
Sven Schmidts
| Datum:09.09.01 21:21 (schmidts@flat2serv.de) |
Hallo, hier ein "nativ" Profan² Code, schon lange her mit Profan² ;) Ohne Garantie, läuft aber trotzdem mit älteren Profan² Versionen (32 Bit)*gg* Mfg. Sven Schmidts " def @WsaStartup(2) !"WSOCK32.DLL","WSAStartup" ',"%#","%" def @WsaCleanup(0) !"WSOCK32.DLL","WSACleanup" ',"","%" def @Wsagetlasterror(0) !"Wsock32.dll","WSAGetLastError" ',"","%" def @Socket(3) !"wsock32.dll","socket" ',"%%%","&" def @Connect(3) !"wsock32.dll","connect" def @send(4) !"wsock32.dll","send" def @recv(4) !"wsock32.dll","recv" def @inet_addr(1) !"wsock32.dll","inet_addr" Def Sleep(1) !"KERNEL32","Sleep" declare struct#, hn#, dh&, sock&, addr&, req$, len&, exit%,stat&, Ipaddr$ dim struct#, 1024 dim hn#, 64 let dh&=@usedll("wsock32.dll") @WsaStartUp(257, struct#) 'Erstelle Socket let sock&= @Socket(2, 1, 0) let Ipaddr$="212.184.80.190" ' = Microsoft.de ;) string struct#,0=Ipaddr$ let addr&=inet_addr(struct#) word struct#,0=2 word struct#,2=$5000 long struct#,4=addr& long struct#,8=0 long struct#,12=0 ' Verbindung erstellen ... let stat&=@Connect(sock&, struct#, 16) ' stat& = -1:Fehler aufgetreten ! let stat&=@wsagetlasterror() ' stat& = -1:Fehler aufgetreten ! let req$=@Add$(@Add$("GET /index.html",@Chr$(13)),@Chr$(10)) string struct#,0=req$ @send(sock&, struct#, @Len(req$), 0) let stat&=@wsagetlasterror() ' stat& = -1:Fehler aufgetreten ! Assign #1, "C:\index.html" OpenRW #1 let exit%=0 while @Equ(exit%, 0) let len&=@recv(sock&, struct#, 1024, 0) @wsagetlasterror() if @Gt(len&, 0) ' Hier könnte in 1 KB Schritten hochgezählt werden, weil immer 1024 Bytes requestet werden BlockWrite #1,struct#,0,len& else ' Nichts mehr eingegangen, Ende ... let exit%=1 endif sleep(8) wend closerw #1 ' Verbindung beenden ... @wsacleanup() freedll dh& dispose struct# dispose hn# MessageBox("","Ende",64) "
Hansen Hawk
| Datum:10.09.01 07:04 (webmaster@urlsubmitter.de) |
Dürfte das nicht Probleme mit T-Online, AOL und Konsorten geben ? Wo kriege ich bei dieser Vorgehensweise den Responsecode her ? Hannes.
Sven Schmidts
| Datum:10.09.01 07:34 (schmidts@flat2serv.de) |
Wieso solltest Du Probleme mit T-Online bekommen? Solange die Verbindung besteht, bekommst Du so Deine Seite. Statt der .html Datei kannst Du z.B. auch eine .exe Datei anfragen. Oder was meinst Du? Mfg. Sven Schmidts
Hansen Hawk
| Datum:10.09.01 08:48 (webmaster@urlsubmitter.de) |
Wenn ich mich nicht täusche schreiben sowohl die AOL als auch die T-Online Installationssätze eine neue Winsock ins System. Versuch mal bei installiertem T-Online Moorhuhn 1 zu spielen dann weißt Du das sich da einiges verändert haben muss. Allerdings ist das für mich nicht soooo wichtig, viel wichtiger sind die HTTP Responsecodes, die muss ich haben. HH
Sven Schmidts
| Datum:10.09.01 09:56 (schmidts@flat2serv.de) |
Nein, T-Online oder AOL können an den Befehlen nichts machen, weil es standart Schnittstellen sind. Dann würde kein Windows-INet Programm mehr laufen. Ich nehme mal an, die klinken sich irgendwo ein. Warum, weswegen ... gute Frage ;) Ersetze mal "GET /index.html" gegen "HEAD /index.html". Es gibt auch "POST /index.html", aber gut. Bei "HEAD" schaust Du in der erste Zeile (normalerweise) nach "HTTP/1.0 200 OK". 200 ist der Status, da kann also auch 403, 404 o.ä. stehen. Mfg. Sven Schmidts
Hansen Hawk
| Datum:10.09.01 10:23 (webmaster@urlsubmitter.de) |
Ich werde das mal ausprobieren, vorerst maximalen Dank !!! HH
Sven Schmidts
| Datum:10.09.01 18:10 (schmidts@flat2serv.de) |
WICHTIGER NACHTRAG: Lade mal mit den Source-Code aus dem ersten Beitrag was runter. Hier der HTML Code: " HTTP/1.1 302 Object moved Server: Microsoft-IIS/5.0 Date: Mon, 10 Sep 2001 16:03:23 GMT Location: http://212.184.80.190/index.html Connection: Keep-Alive Content-Length: 153 Content-Type: text/html Set-Cookie: ASPSESSIONIDGQQGQZKC=OPDGGLEBBCFIHLLPNAEBFHHL; path=/ Cache-control: private <head><title>Object moved</title></head> <body><h1>Object Moved</h1>This object may be found <a HREF="http://212.184.80.190/index.html">here</a>.</body> " Dadrin findest Du alles, was Du brauchst. Nach "Cache-Control" kommt der eigentliche Inhalt, davor ist alles Header. Zwischen Header und Inhalt befinden sich 2x ein CR (#13#10), daran erkennst Du die Trennung zwischen beiden. Ein wenig zur Einführung, der Reihe nach: - HTTP/1.1 302 Object moved HTTP Version 1.1, ResponseCode ist 302. Hier könnte auch 400, 403, 404 etc. stehen. - Server: Microsoft-IIS/5.0 Die Serversoftware, bei mir steht da z.B. "flat2serv" - Date: Mon, 10 Sep 2001 16:03:23 GMT Selbsterklärend ... - Location: http://212.184.80.190/index.html Selbsterklärend ... - Content-Length: 153 Nachfolgend an diesen Header (nach 2xCR) folgen 153 Bytes ... - Content-Type: text/html ... vom Typ "text/html". Hier könnte z.B. auch "image/jpeg" stehen. - Set-Cookie: ASPSESSIONIDGQQGQZKC=OPDGGLEBBCFIHLLPNAEBFHHL; path=/ Cookie Befehl für Browser, bringt für Profan² nicht ganz soviel ;) Damit hast Du alles, was Du brauchst. Es gibt noch mehr, so verwendet z.B. "www.metager.de" statt "Content-length" "Range: bytes". Das wird gesendet, wenn die Länge des anschliessenden Dokumentes noch nicht feststeht. Aber gut, das würde hier zu weit führen *gg* Mfg. Sven Schmidts
Hansen Hawk
| Datum: 11.09.01 18:27 (webmaster@urlsubmitter.de) |
Also das mit dem Code ist zwar nicht schlecht, die Verbindung ins Netz klappt auch prinzipiell, aber es gelang mir kein einziges Mal Verbindung mit dem Server zu bekommen. Jedes Mal bekomme ich das folgende ausgespuckt : "HTTP/1.0 408 Request Time-out Server: Squid/2.1.PATCH1 Mime-Version: 1.0 Date: Tue, 11 Sep 2001 16:26:44 GMT Content-Type: text/html Content-Length: 604 Expires: Tue, 11 Sep 2001 16:26:44 GMT X-Squid-Error: ERR_LIFETIME_EXP 0 <HTML><HEAD> <TITLE>ERROR: The requested URL could not be retrieved</TITLE> </HEAD><BODY> <H1>ERROR</H1> <H2>The requested URL could not be retrieved</H2> <HR> <P> While trying to retrieve the URL: <A HREF="N/A">N/A</A> <P> The following error was encountered: <UL> <LI> <STRONG> Connection Lifetime Expired </STRONG> </UL> <P> Squid has terminated the request because it has exceeded the maximum connection lifetime. </P> <br clear="all"> <hr noshade size=1> Generated Tue, 11 Sep 2001 16:26:44 GMT by bln2-t1-2.mcbone.net (<a href="http://squid.nlanr.net/Squid/">Squid/2.1.PATCH1</a>) </BODY></HTML> " Weiß aber nicht woran es liegt..... HH.

| Zurück zur Übersicht