ich würde mit den network befehle eine verbindung zum server herstellen dun die datei anfordern, dann kriegste einen network event vom server ..
am anfang sendet der server imemr einen header mit den angaben zum server, ob php da is, dateityp und auch die größe in byte
Code: Alles auswählen
;(C) Alexander N
; PB 4.0
#http = 80
#ftp = 21
#server = 10
#site = 20
#http11 = "HTTP/1.1"
#http10 = "HTTP/1.0"
InitNetwork()
Procedure connect(server.s,port = #http)
tmp = OpenNetworkConnection(server.s,port)
Debug "Conection To "+server+" at port "+Str(port)+": "+Str(tmp)
If tmp
Return_ = tmp
Else
Return_ = #False
EndIf
ProcedureReturn Return_
EndProcedure
Procedure close(id.l)
Debug "start close "+Str(id)
Debug "closeconnection: "+Str(CloseNetworkConnection(id))
Debug "closed: "+Str(id)
Debug ""
EndProcedure
Procedure mainwindow()
Global window = OpenWindow(#PB_Any, 0, 0, 800, 540, "Network", #PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
Global hwnd = WindowID(window)
If window
If CreateGadgetList(hwnd)
Global gadget_editor = EditorGadget(#PB_Any, 1, 1, 1, 1, #PB_Editor_ReadOnly)
Global gadget_info = EditorGadget(#PB_Any, 1, 1,1, 1,#PB_Editor_ReadOnly)
Global gadget_split = SplitterGadget(#PB_Any,5,35,790,500,gadget_editor,gadget_info,#PB_Splitter_Separator)
SetGadgetState(gadget_split,450)
SetGadgetAttribute(gadget_split,#PB_Splitter_FirstMinimumSize,100)
SetGadgetAttribute(gadget_split,#PB_Splitter_SecondMinimumSize,20)
Global gadget_ok = ButtonGadget(#PB_Any, 720, 5, 70, 20, "Go")
Global gadget_input = StringGadget(#PB_Any, 5, 5, 700, 20, "http://www.alexander-n.de/")
PureRESIZE_SetGadgetResize(gadget_split,1,1,1,1)
PureRESIZE_SetGadgetResize(gadget_ok,0,1,1,0)
PureRESIZE_SetGadgetResize(gadget_input,1,1,1,0)
PureRESIZE_SetWindowMinimumSize(window,400,400)
SetWindowState(window,#PB_Window_Maximize)
HideWindow(window,0)
EndIf
EndIf
EndProcedure
Procedure ende()
End
EndProcedure
Procedure.s parse1(tmp$) ; parse http:// ... /
Debug"" : Debug tmp$
tmp$ = Trim(tmp$)
If Not tmp$
ProcedureReturn ""
EndIf
Debug tmp$
If LCase(Left(tmp$,7)) = "http://"
tmp$ = Trim(Mid(tmp$,8,Len(tmp$)-7))
EndIf
Debug tmp$
If Right(tmp$,1) = "/"
tmp$ = LSet(tmp$,Len(tmp$)-1)
EndIf
Debug tmp$
ProcedureReturn tmp$
EndProcedure
Procedure.s parse2(tmp$,mode.l) ; parse server and site txt
tmp$ = Trim(tmp$)
pos = FindString(tmp$,"/",0)
If pos
server.s = Mid(tmp$,1,pos-1)
Debug "server : "+server
site.s = Mid(tmp$,pos+1,Len(tmp$)-pos)
Debug "site : "+site
Else
server.s = tmp$
site.s = ""
EndIf
If mode = #server
ProcedureReturn server
ElseIf mode = #site
ProcedureReturn site
EndIf
ProcedureReturn ""
EndProcedure
Procedure startsite(tmp$) ;send network string
tmp$ = parse1(tmp$)
server.s = parse2(tmp$,#server)
site.s = parse2(tmp$,#site)
If server
Global id = connect(server)
If Not id
ProcedureReturn
EndIf
Else
ProcedureReturn
EndIf
site.s = "http://"+server+"/"+site
Header.s = "GET "+site+" "+#http10+#CRLF$
Header + "Host: "+server+#CRLF$
Header + "User-Agent: Alexander-N.de Browser"+#CRLF$
Header + #CRLF$
Debug Header
SetGadgetText(gadget_info,"Gesendet:"+#CRLF$+Header)
SendNetworkString(id,Header)
EndProcedure
Procedure.s empfang(text.s,output_gadget.l)
tmp$ = text.s : text = ""
header_ende = FindString(tmp$,#CRLF$+#CRLF$,0)
Header$ = Mid(tmp$,1,header_ende)
txt$ = Mid(tmp$,header_ende,(Len(tmp$)-header_ende)-4)
tmp$ = ""
SetGadgetText(gadget_info,GetGadgetText(gadget_info)+#CRLF$+"Empfangen:"+#CRLF$+Header$)
tmp$ = txt$ : txt$ = ""
head_start = FindString(LCase(tmp$),LCase("<head>"),0)
If head_start
head_end = FindString(LCase(tmp$),LCase("</head>"),head_start) + Len("</head>")
If head_end
head$ = Mid(tmp$,head_start,head_end-head_start)
tmp$ = Trim(Mid(tmp$,head_end,Len(tmp$)))
EndIf
EndIf
txt$ = ""
txt$ + "Head-Teil:" + #CRLF$
txt$ + head$
txt$ + #CRLF$ + #CRLF$
For i = 1 To 300
txt$ + "-"
Next
txt$ + #CRLF$
txt$ + "HTML:" + #CRLF$
txt$ + tmp$
txt$ + #CRLF$
SetGadgetText(output_gadget,txt$)
EndProcedure
mainwindow()
Repeat
Delay(1)
If zeit
If zeit < ElapsedMilliseconds() - 1500
DisableGadget(gadget_ok,0)
zeit = 0
EndIf
EndIf
Select WindowEvent()
Case #PB_Event_CloseWindow
ende()
Case #PB_Event_Gadget
Select EventGadget()
Case gadget_ok
startsite(GetGadgetText(gadget_input))
DisableGadget(gadget_ok,1)
zeit = ElapsedMilliseconds()
EndSelect
EndSelect
If id
Select NetworkClientEvent(id)
Case 2
len = 2
FreeMemory(*mem)
*mem = AllocateMemory(len)
tmp$ = ""
Repeat
erg = ReceiveNetworkData(id,*mem,len)
t.s = PeekS(*mem,len)
;Debug t
tmp$ + t
FreeMemory(*mem)
*mem = AllocateMemory(len)
Until erg <> len
Debug tmp$
empfang(tmp$,gadget_editor)
tmp$ = ""
EndSelect
EndIf
ForEver