ReceiveHTTPFile funktioniert nicht mehr

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ReceiveHTTPFile funktioniert nicht mehr

Beitrag 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ß.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: ReceiveHTTPFile funktioniert nicht mehr

Beitrag 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.
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ReceiveHTTPFile funktioniert nicht mehr

Beitrag 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()."))
Hygge
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: ReceiveHTTPFile funktioniert nicht mehr

Beitrag 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???
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: ReceiveHTTPFile funktioniert nicht mehr

Beitrag 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:
Benutzeravatar
TroaX
Beiträge: 661
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: ReceiveHTTPFile funktioniert nicht mehr

Beitrag 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).
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Antworten