Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249470 (10906)
  Suchen
 Zurück zur Übersicht
 AutorThema: HTTP Requests...
Hansen Hawk
Datum:09.09.01 19:10 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (webmaster@urlsubmitter.de) 


Ich werde das mal ausprobieren, vorerst maximalen Dank !!!

HH


Sven Schmidts
Datum:10.09.01 18:10 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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