PHP PB
-
- Beiträge: 118
- Registriert: 26.06.2005 23:06
- Wohnort: Dinslaken
PHP PB
wie kann ich ne verbindung zu einem PHP script aufnehmen und dem php script ne $_POST zukommen lassen?
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Code: Alles auswählen
; HTTP Commands - DarkDragon
; ***************************
; Commands:
; ---------
; HTTPRequest(URL.s, *EndSize.LONG, PacketSize, *Callback) - Result: Pointer to a buffer containing the webdata
; URL.s - [in] Nullterminated string with the link to the file
; *EndSize - [out] Pointer to a long variable which receives the size of the resulting buffer
; PacketSize - [in] Long variable containing the size of the packets(steps) to download
; *Callback - [in] Pointer to a callback method receiving the following parameters: CurrentDownloadedSize.l, MaximumLength.l
; HTTPRequest_Password(URL.s, *EndSize.LONG, PacketSize, Username.s, Password.s, *Callback) - Result: Pointer to a buffer containing the webdata
; URL.s - [in] Nullterminated string with the link to the file
; *EndSize - [out] Pointer to a long variable which receives the size of the resulting buffer
; PacketSize - [in] Long variable containing the size of the packets(steps) to download
; Username.s - [in] Nullterminated string containing the username
; Password.s - [in] Nullterminated string containing the password(NOT encoded)
; *Callback - [in] Pointer to a callback method receiving the following parameters: CurrentDownloadedSize.l, MaximumLength.l
InitNetwork()
#TIMEOUT = 1500
Procedure.s ReceiveLine(ConnectionID)
Text.s = ""
While char.b <> #LF
char = 0
ReceiveNetworkData(ConnectionID, @char, 1)
If char <> 0
Text.s + Chr(char)
EndIf
Wend
ProcedureReturn RemoveString(RemoveString(Text, #CR$), #LF$)
EndProcedure
Procedure HTTPRequest(URL.s, *EndSize.LONG, PacketSize, *Callback)
Protected Size.l, Data_.s, s.l, Method.s, File.s, Content.s, Text.s, Length.l, Line.s
Protected CurSize.l, oSize.l, t.l, ConnectionID.l
If Left(URL, 7) = "http://" : URL = Right(URL, Len(URL)-7) : EndIf
s = FindString(URL, "/", 1)
Host.s = "" : File.s = ""
If s <> 0 : Host.s = Left(URL, s-1) : File.s = Right(URL, Len(URL)-s) : Else : Host = URL : EndIf
s = FindString(File, "?", 1)
If s <> 0
Method.s = "POST"
Content.s = Right(File, Len(File)-s)
File = Left(File, s-1)
Else
Method.s = "GET"
Content.s = ""
EndIf
ConnectionID = OpenNetworkConnection(Host, 80)
If ConnectionID
Data_.s = Method+" /"+File+" HTTP/1.0"+#CRLF$
Data_.s + "Host: "+Host+#CRLF$
Data_.s + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"+#CRLF$
If Content <> ""
Data_.s + "Connection: close"+#CRLF$
Data_.s + "Content-Type: application/x-www-form-urlencoded"+#CRLF$
Data_.s + "Content-Length: "+Str(Len(Content))+#CRLF$
Data_.s + #CRLF$ + Content.s + #CRLF$+#CRLF$
Else
Data_.s + "Connection: close"+#CRLF$+#CRLF$
EndIf
SendNetworkString(ConnectionID, Data_)
While NetworkClientEvent(ConnectionID) <> 2 : Delay(10) : Wend
Length = 0
Line.s = ""
Repeat
Line = ReceiveLine(ConnectionID)
Select LCase(StringField(Line, 1, ":"))
Case "content-length"
Length = Val(Trim(StringField(Line, 2, ":")))
EndSelect
Until Len(Trim(Line)) <= 4
Size = 0
If Length <> 0
*Result = AllocateMemory(Length)
While Size < Length
If CurSize > 0
Size + CurSize
If *Callback
CallFunctionFast(*Callback, Size, Length)
EndIf
EndIf
If Size > (Length-PacketSize)
PacketSize = Length-Size
EndIf
If PacketSize > 0
CurSize = ReceiveNetworkData(ConnectionID, *Result+Size, PacketSize)
EndIf
Wend
Else
*Buffer = AllocateMemory(PacketSize)
*Result = AllocateMemory(1)
t = ElapsedMilliseconds()
While ElapsedMilliseconds()-t <= #TIMEOUT
If NetworkClientEvent(ConnectionID) = 2
CurSize = ReceiveNetworkData(ConnectionID, *Buffer, PacketSize)
If CurSize > 0
oSize = Size
Size + CurSize
*Result = ReAllocateMemory(*Result, Size)
CopyMemory(*Buffer, *Result+oSize, CurSize)
If *Callback
CallFunctionFast(*Callback, Size, 0)
EndIf
EndIf
t = ElapsedMilliseconds()
EndIf
Wend
Length = Size
EndIf
*EndSize\l = Length
If *Callback
CallFunctionFast(*Callback, Size, Length)
EndIf
CloseNetworkConnection(ConnectionID)
ProcedureReturn *Result
EndIf
EndProcedure
Procedure HTTPRequest_Password(URL.s, *EndSize.LONG, PacketSize, Username.s, Password.s, *Callback)
Protected Size.l, Data_.s, s.l, Method.s, File.s, Content.s, Text.s, Length.l, Line.s
Protected CurSize.l, oSize.l, t.l, ConnectionID.l
If Left(URL, 7) = "http://" : URL = Right(URL, Len(URL)-7) : EndIf
s = FindString(URL, "/", 1)
Host.s = "" : File.s = ""
If s <> 0 : Host.s = Left(URL, s-1) : File.s = Right(URL, Len(URL)-s) : Else : Host = URL : EndIf
s = FindString(File, "?", 1)
If s <> 0
Method.s = "POST"
Content.s = Right(File, Len(File)-s)
File = Left(File, s-1)
Else
Method.s = "GET"
Content.s = ""
EndIf
InputBuffer.s = Username+":"+Password
OutputBuffer.s = Space(256)
Base64Encoder(@InputBuffer, Len(InputBuffer), @OutputBuffer, 255)
ConnectionID = OpenNetworkConnection(Host, 80)
If ConnectionID
Data_.s = Method+" /"+File+" HTTP/1.0" + #CRLF$
Data_.s + "Host: "+Host + #CRLF$
Data_.s + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7" + #CRLF$
Data_.s + "Authorization: Basic "+ OutputBuffer + #CRLF$
If Content <> ""
Data_.s + "Connection: close" + #CRLF$
Data_.s + "Content-Type: application/x-www-form-urlencoded"+#CRLF$
Data_.s + "Content-Length: "+Str(Len(Content))+#CRLF$
Data_.s + #CRLF$ + Content.s + #CRLF$+#CRLF$
Else
Data_.s + "Connection: close" + #CRLF$ + #CRLF$
EndIf
SendNetworkString(ConnectionID, Data_)
While NetworkClientEvent(ConnectionID) <> 2 : Delay(10) : Wend
Length = 0
Line.s = ""
Repeat
Line = ReceiveLine(ConnectionID)
Select LCase(StringField(Line, 1, ":"))
Case "content-length"
Length = Val(Trim(StringField(Line, 2, ":")))
EndSelect
Until Len(Trim(Line)) <= 4
Size = 0
If Length <> 0
*Result = AllocateMemory(Length)
While Size < Length
If CurSize > 0
Size + CurSize
If *Callback
CallFunctionFast(*Callback, Size, Length)
EndIf
EndIf
If Size > (Length-PacketSize)
PacketSize = Length-Size
EndIf
If PacketSize > 0
CurSize = ReceiveNetworkData(ConnectionID, *Result+Size, PacketSize)
EndIf
Wend
Else
*Buffer = AllocateMemory(PacketSize)
*Result = AllocateMemory(1)
t = ElapsedMilliseconds()
While ElapsedMilliseconds()-t <= #TIMEOUT
If NetworkClientEvent(ConnectionID) = 2
CurSize = ReceiveNetworkData(ConnectionID, *Buffer, PacketSize)
If CurSize > 0
oSize = Size
Size + CurSize
*Result = ReAllocateMemory(*Result, Size)
CopyMemory(*Buffer, *Result+oSize, CurSize)
If *Callback
CallFunctionFast(*Callback, Size, 0)
EndIf
EndIf
t = ElapsedMilliseconds()
EndIf
Wend
Length = Size
EndIf
*EndSize\l = Length
If *Callback
CallFunctionFast(*Callback, Size, Length)
EndIf
CloseNetworkConnection(ConnectionID)
ProcedureReturn *Result
EndIf
EndProcedure
; Example:
; *Buffer = HTTPRequest("http://www.bradan.net/", @Size, 16, 0)
; Debug Size
; Debug PeekS(*Buffer, Size)
; FreeMemory(*Buffer)
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.
-
- Beiträge: 118
- Registriert: 26.06.2005 23:06
- Wohnort: Dinslaken
ui danke des is etwas kompli, habe es so geht aber leider nicht, nur warum?
das ist nur ein ausschnitt von meinem prog, aber das ist ja eigentlich auch das wichtigste
Code: Alles auswählen
ConnectionID = OpenNetworkConnection("purechannel.ath.cx", 80)
If ConnectionID = 0
MessageRequester("Error", "keine verbindung !", 0)
End
EndIf
Repeat
EventID=WindowEvent()
If EventGadgetID() = #send
If EventType() = #PB_EventType_LeftClick
Text$="chat/chtterphp.php?mess="+GetGadgetText(#eingabe)
SendNetworkString(ConnectionID, "GET /"+Text$+" HTTP/1.1" )
SendNetworkString(ConnectionID, "Host: "+"purechannel.ath.cx" )
SendNetworkString(ConnectionID, "" )
EndIf
EndIf
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Bei dir fehlt erstens #CRLF$ nach jedem String den du Sendest und zweitens müssen es beim letzten 2 sein, soviel ich weiß.
[EDIT]
Versuchs auch mal mit HTTP/1.0, das hat keine Chunks, ist somit einfacher hand zu haben.
[EDIT]
Versuchs auch mal mit HTTP/1.0, das hat keine Chunks, ist somit einfacher hand zu haben.
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.
-
- Beiträge: 118
- Registriert: 26.06.2005 23:06
- Wohnort: Dinslaken
also ich versteh es nicht, es muss doch auch so gehen das mein php script das empfängt oder?
Code: Alles auswählen
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Verbindung = OpenNetworkConnection("purechannel.ath.cx", 80 , #PB_Network_TCP)
If Verbindung
SendNetworkString(Verbindung, "GET http://adresse.php?mess=mathiasisback")
EndIf
wenn ich das richtig verstehe, dann liegt dein php-script bei einem http-server, richtig? "OpenNetworkConnection("purechannel.ath.cx", 80 , #PB_Network_TCP)" lässt zumindestens darauf schliessen.
das problem ist dann, das du php nicht direkt was schicken kannst, sondern den "umweg" durch den http-server gehen und auch seine "sprache" das "http" (hypertext transfer protocol) sprechen musst. normaler weise macht das der browser für uns. der würde jetzt aus "http://purechannel.ath.cx/adresse.php?m ... hiasisback" folgendes machen:
zum einen baut er eine verbindung nach "purechannel.ath.cx" port 80 (port 80 ist bei http der standard).
dann würde er folgende "zeilen" senden wobei jede einzelne zeile mit einem EOL endet:
GET /adresse.php?mess=mathiasisback HTTP/1.1
Host: purechannel.ath.cx
jetzt würden noch ein paar zeilen kommen, die für dein problem aber nicht so wichtig sind. die erste zeile die mit dem "GET" ist mit die wichtigste "zeile". hier steht das, was du vom http-server möchtest, dass er das script "adresse.php" aufruft und "mess=mathiasisback" an das script weiterleitet.
als letztes, damit der http-server weiss, das der "request" beendet ist, muss der browser oder wir eine "leere", d.h. ein einzelnes EOL senden. dann heisst es auf eine antwort vom server bzw. vom php-script warten.
wenn ich das richtig sehe, fehlem in deinem code nur die EOL's.
so sollte es dann eigentlich klappen:
das problem ist dann, das du php nicht direkt was schicken kannst, sondern den "umweg" durch den http-server gehen und auch seine "sprache" das "http" (hypertext transfer protocol) sprechen musst. normaler weise macht das der browser für uns. der würde jetzt aus "http://purechannel.ath.cx/adresse.php?m ... hiasisback" folgendes machen:
zum einen baut er eine verbindung nach "purechannel.ath.cx" port 80 (port 80 ist bei http der standard).
dann würde er folgende "zeilen" senden wobei jede einzelne zeile mit einem EOL endet:
GET /adresse.php?mess=mathiasisback HTTP/1.1
Host: purechannel.ath.cx
jetzt würden noch ein paar zeilen kommen, die für dein problem aber nicht so wichtig sind. die erste zeile die mit dem "GET" ist mit die wichtigste "zeile". hier steht das, was du vom http-server möchtest, dass er das script "adresse.php" aufruft und "mess=mathiasisback" an das script weiterleitet.
als letztes, damit der http-server weiss, das der "request" beendet ist, muss der browser oder wir eine "leere", d.h. ein einzelnes EOL senden. dann heisst es auf eine antwort vom server bzw. vom php-script warten.
wenn ich das richtig sehe, fehlem in deinem code nur die EOL's.
so sollte es dann eigentlich klappen:
Code: Alles auswählen
ConnectionID = OpenNetworkConnection("purechannel.ath.cx", 80)
If ConnectionID = 0
MessageRequester("Error", "keine verbindung !", 0)
End
EndIf
EOL$=Chr(13)+Chr(10)
Repeat
EventID=WindowEvent()
If EventGadgetID() = #send
If EventType() = #PB_EventType_LeftClick
Text$="chat/chtterphp.php?mess="+GetGadgetText(#eingabe)
SendNetworkString(ConnectionID, "GET /"+Text$+" HTTP/1.1"+EOL$ )
SendNetworkString(ConnectionID, "Host: "+"purechannel.ath.cx"+EOL$)
SendNetworkString(ConnectionID, EOL$ )
EndIf
EndIf