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")
:freak:

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).