Seite 1 von 1

keine Kekse?

Verfasst: Sa, 18. Feb 2023 7:36
von georg
Guten Morgen,


aktuell versuche ich, von wget auf die HttpClient()-Klasse umzustellen. Das klappt bisher recht gut, allerdings habe ich da ein Problem:

Code: Alles auswählen

   oHttp := HttpClient():new(cSearch)
   oHttp:setUserAgent(cUserAgent)
   oHttp:httpRequest:setParameter("bestand", "")
   oHttp:httpRequest:setParameter("ueberall", "")
   oHttp:httpRequest:setParameter("showhits", "200")
   cResult := oHttp:send()
   nStatusCode := oHttp:getStatusCode()
Klappt soweit gut, der Statuscode ist 200, aber zurückgegeben wird:

Code: Alles auswählen

<br/><br/><p><b>Bitte aktivieren Sie: Cookies auf dieser Seite zulassen.</b><br /></p>
Gut, also lese ich die Cookies aus, die mir zurückgeliefert (!) werden, und packe sie noch dazu:

Code: Alles auswählen

   aCookies := oHttp:HttpResponse:getCookies()
...
   oHttp := HttpClient():new(cSearch)
   oHttp:setUserAgent(cUserAgent)
   oHttp:httpRequest:setParameter("bestand", "")
   oHttp:httpRequest:setParameter("ueberall", "")
   oHttp:httpRequest:setParameter("showhits", "200")
   nLen := Len(aCookies)
   FOR nI := 1 TO nLen
      oHttp:httpRequest:setCookie(aCookies[nI]:name, aCookies[nI]:value)
   NEXT
   cResult := oHttp:send()
Am Inhalt des Ergebnisses ändert das nicht. In der Dokumentation habe ich leider keinen Hinweis gefunden, wie ich die Annahme von Cookies aktiviere?

Re: keine Kekse?

Verfasst: So, 19. Feb 2023 21:42
von Dominik Krebs
Hallo,
wenn du die Seite über einen Browser ansurftst, und die cookies akzeptierst, schau dir doch mal an welche cookies du so hast. Vermutlich bekommst du einen Session Token oder eine Session ID die du nur nach Bestätigung des Dialogs erhälst.
Diese wirst du dann mit übertragen müssen.

Re: keine Kekse?

Verfasst: Mo, 20. Feb 2023 8:02
von georg
Guten Morgen, Dominik -


die Seite liefert nur ein Cookie, nämlich die PHPSESSID. Das Cookie übernehme ich aus dem httpResponse-Objekt und gebe es beim nächsten Aufruf über das httpRequest-Objekt wieder an die Seite zurück.

Trotzdem liefert der Abruf die Fehlermeldung, dass Cookies nicht akzeptiert werden.

Firefox zeigt mir an, dass nur dieses eine Cookie gesetzt ist.

Also vermute ich mal, dass es da einen Schalter in den Http*-Klassen geben sollte (eventuell noch nicht gibt?).

Re: keine Kekse?

Verfasst: Mo, 20. Feb 2023 12:56
von Dominik Krebs
Hallo Georg,
Was für einen User-Agent und Content-Type verwendest du denn?

Re: keine Kekse?

Verfasst: Mo, 20. Feb 2023 15:08
von georg
Hallo, Dominik -


ja, etwas kryptisch, nur die Variablen anzugeben:

Code: Alles auswählen

   cUserAgent := "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0"
   cAcceptType := "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/" + "*;q=0.8"
Den Content-Type kann ich m.W. nicht setzen, zumindest habe ich keine passende Methode in der Klassendokumentation gefunden. Also habe ich im Debugger experimentiert und diese undokumentierte Methode gefunden:

Code: Alles auswählen

   cContentType := "text/html; charset=UTF-8"
...
   oHttp:httpRequest:setContentType(cContentType)
Den Wert habe ich aus dem Firefox-Debugger entnommen, es ist also das, was zwischen Firefox und der Seite ausgehandelt wird.

Bringt aber auch kein anderes Ergebnis.

Re: keine Kekse?

Verfasst: Mo, 20. Feb 2023 16:57
von Dominik Krebs
Falls es möglich ist, kannst du mir gerne mal per PN die URL geben, dann schaue ich es mir mal näher an.
Den Content-Type setzt du so schon richtig. In Der Doku findest du ihn in der HttpMessage() Klasse.
Hast du mal versucht, lediglich text/html zu übermittln?
Auch den UserAgent würde ich einfach mal nicht setzen. Es wird dann Xbase++/2.0 (Windows X 0000 Build X) übermittelt.