keine Kekse?

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

keine Kekse?

Beitrag 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?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: keine Kekse?

Beitrag 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.
Gruß Dominik
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: keine Kekse?

Beitrag 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?).
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: keine Kekse?

Beitrag von Dominik Krebs »

Hallo Georg,
Was für einen User-Agent und Content-Type verwendest du denn?
Gruß Dominik
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: keine Kekse?

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: keine Kekse?

Beitrag 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.
Gruß Dominik
Antworten