Seite 2 von 2
Re: ReceiveHTTPFile funktioniert nicht mehr
Verfasst: 22.08.2018 22:31
von RSBasic
Weil du damit nur die erste Version des Quellcodes herunterlädst. Einige Websiten modifizieren ihr DOM nachträglich.
Ich kenne nur eine
Lösung für WebGadget, um den endgültigen Quellcode auszulesen, aber wie man es beim ReceiveHTTPFile() macht, weiß ich gerade selber nicht.
\\Edit:
Bei meinem Test ist data.dat 221.931 Bytes groß.
Re: ReceiveHTTPFile funktioniert nicht mehr
Verfasst: 22.08.2018 23:07
von NicTheQuick
Bei mir sind es 221932 Bytes.
Der DOM wird sicherlich noch nachträglich geändert, immerhin laufen bei Google noch einige Javascripts. Dafür braucht man aber wirklich ein WebGadget.
Re: ReceiveHTTPFile funktioniert nicht mehr
Verfasst: 23.08.2018 00:52
von Kiffi
221.931 Bytes
mal abgesehen davon, dass der Code ohne Modifikation nicht läuft ("Comparisons (=, <, >, =< and >=) are only supported with keywords like If, While, Until or within Bool()."))
Re: ReceiveHTTPFile funktioniert nicht mehr
Verfasst: 23.08.2018 21:11
von Moxl
Also ich habe es jetzt mal mit dem Code von RSBasic probiert
Code: Alles auswählen
;Autor: freak
;http://www.purebasic.fr/german/viewtopic.php?p=112747#p112747
EnableExplicit
Procedure WebGadget_Document(Gadget, *IID)
Protected Document = 0
Protected Browser.IWebBrowser2
Protected DocumentDispatch.IDispatch
Browser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(Gadget), #GWL_USERDATA)
If Browser
If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK And DocumentDispatch
DocumentDispatch\QueryInterface(*IID, @Document)
DocumentDispatch\Release()
EndIf
EndIf
ProcedureReturn Document
EndProcedure
Procedure.s WebGadget_PageHtml(Gadget)
Protected Result$ = ""
Protected Document.IHTMLDocument3
Protected Root.IHTMLElement
Protected bstr_html
Document.IHTMLDocument3 = WebGadget_Document(Gadget, ?IID_IHTMLDocument3)
If Document
If Document\get_documentElement(@Root.IHTMLElement) = #S_OK
If Root\get_outerHTML(@bstr_html) = #S_OK And bstr_html
Result$ = PeekS(bstr_html, -1, #PB_Unicode)
SysFreeString_(bstr_html)
EndIf
Root\Release()
EndIf
Document\Release()
EndIf
ProcedureReturn Result$
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
WebGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, "http://www.purebasic.com")
ButtonGadget(2, WindowWidth(0)-110, WindowHeight(0)-30, 100, 20, "HTML ermitteln", 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2
Debug WebGadget_PageHtml(1)
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
DataSection
IID_IHTMLDocument2: ; {332C4425-26CB-11D0-B483-00C04FD90119}
Data.l $332C4425
Data.w $26CB, $11D0
Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
IID_IHTMLDocument3: ; {3050F485-98B5-11CF-BB82-00AA00BDCE0B}
Data.l $3050F485
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
IID_NULL: ; {00000000-0000-0000-0000-000000000000}
Data.l $00000000
Data.w $0000, $0000
Data.b $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection
; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 2
; Folding = -
; EnableUnicode
; EnableXP
; EnableUser
; EnableCompileCount = 0
; EnableBuildCount = 0
aber leider funktioniert das auch nicht. Bei
www.google.de bekomme ich wieder nur ca. 48.000 Zeichen.
Wie bekommt ihr die 200.000 bytes???
Re: ReceiveHTTPFile funktioniert nicht mehr
Verfasst: 23.08.2018 21:15
von Moxl
Naja immerhin 2.000 Zeichen mehr als mit
Code: Alles auswählen
InitNetwork()
Debug ReceiveHTTPFile("https://www.google.de", GetHomeDirectory()+"test.dat")

Re: ReceiveHTTPFile funktioniert nicht mehr
Verfasst: 23.08.2018 23:40
von TroaX
Moxl hat geschrieben:aber leider funktioniert das auch nicht. Bei
http://www.google.de bekomme ich wieder nur ca. 48.000 Zeichen.
Wie bekommt ihr die 200.000 bytes???
Ganz einfach. Weil die Angabe in Byte's nun einmal deutlich Größer ist als die Angabe in Zeichen. Die Seite ist in UTF-8 kodiert. Ein Zeichen kann theoretisch bis zu 4 Byte haben. 48.000 x 4 = 192.000 Bytes. Differenzen können im Markup immer auftreten, da viel vom Javascriptcode im HTML eingelagert ist. Ich gehe daher davon aus, das Passagen dieser Codes dynamisch serverseitig erzeugt werden. Deswegen hänge dich nicht daran auf. Sondern versuche das zu bekommen, was du haben möchtest. Ich kann mir nicht vorstellen, das dein Projekt daran scheitert, das du statt 200.000 Bytes nur 48.000 Zeichen hast (was logischerweise nicht vergleichbar ist).