AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows API: HTTP D11 vs. D10

Ein Thema von looseleaf · begonnen am 18. Jul 2023 · letzter Beitrag vom 20. Jul 2023
Antwort Antwort
Seite 1 von 2  1 2      
looseleaf

Registriert seit: 25. Mai 2011
66 Beiträge
 
#1

Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 11:37
Liebe Gemeinde!

Wir siedeln gerade unsere D10 Anwendung auf D11. Wir haben eine Unit im Einsatz, die seit Jahren zuverläsig HTTP-Anfragen (vor allem HTTPS) ereldigt. Mit D11 bekommen wir immer wieder, dann aber gehäuft, die Rückmeldung HTTP/400 Bad Request. Betriebssysteme sind Windows 11, ein und dieselbe EXE funktioniert auf einem Computer, auf einem anderen nicht. Und irgendwann geht sie dann wieder.
Kopiere ich die URLs in den Webbrowser, funktioniert es immer, ich schließe daher ein Webserverproblem explizit aus.
Es sind keine URLs mit Parametern, z. B. einfach https://unserhostname/Service/serviceinfo.txt

Die verwendeten API Calls sind
InternetOpenA
InternetSetOptionA
InternetConnectA
HttpOpenRequestA
InternetQueryOptionA
InternetSetOptionA
HttpSendRequestA
InternetReadFile

Die Exception taucht beim HttpSendRequestA auf, liefert aber noch eine passende Server-Fehlermeldung. An die Serverlogs komme ich leider nicht ran.

Hat irgendjemand eine sinnvolle Idee, wo ich überhaupt anfangen soll, oder vielleicht schon einmal von so etwas gehört?

Ratlos
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 11:54
.. würde es helfen, wenn Du den Traffic mit wireshark tracen würdest?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
66 Beiträge
 
#3

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 12:02
.. würde es helfen, wenn Du den Traffic mit wireshark tracen würdest?

Grüße
Klaus
Nicht bei HTTPS, und die fraglichen Reqeusts sind alle HTTPS. Zumindest inhaltlich (gesendete Header) hab ich keine Chance.
Aber ich ziehe gerade lokal einen Apachen hoch und werde die URLs mal dorthin umbiegen, dort bekomme ich dann wenigstens die Serverlogs.

Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#4

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 13:36
Sollten die neueren TNetHTTPClient bzw. TNetHTTPRequest nicht auch HTTPS können? (mach es intern über Windows, bzw. auch für andere OS)

Also nicht so wie beim TIdHTTP, wo man womöglich erst noch TIdSSLIOHandlerSocketOpenSSL und eventuell paar DLLs mitbringen und anhängen muß.


Per se sollte es aber für die direkte Verwendung einer WinAPI keinen Unterschied machen, welche DelphiVersion es ist.
Und zwischen D10 und D11 sollte es auch keine großen Unterschiede geben, was z.B. die Einstellungen der PE oder des Windows-Manifests angeht, also was sich z.B. auf die Virtualisierung "alter" Programme auswirken würde (XP-Mode usw.).
[edit] stimmt ... ASLR ist in D11 nun aktiv
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Jul 2023 um 15:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#5

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 14:06
ein und dieselbe EXE funktioniert auf einem Computer, auf einem anderen nicht. Und irgendwann geht sie dann wieder.
Könnte dann aber auch an ASLR liegen - das sorgt nämlich für ein verändertes Umfeld bei jedem Start. Einfach mal probeweise in den Linker-Optionen abschalten.

Sollte es damit dann funktionieren, liegt der Fehler aber nicht in dieser Einstellung, sondern im (vermutlich eigenen) Code. Das Flag macht ihn halt nur sichtbar. Ursache könnte z.B. die Verwendung von Integer sein, wo eigentlich Cardinal hingehört.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
66 Beiträge
 
#6

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 14:09
Sollten die neueren TNetHTTPClient bzw. TNetHTTPRequest nicht auch HTTPS können? (mach es intern über Windows, bzw. auch für andere OS)

Also nicht so wie beim TIdHTTP, wo man womöglich erst noch TIdSSLIOHandlerSocketOpenSSL und eventuell paar DLLs mitbringen und anhängen muß.


Per se sollte es aber für die direkte Verwendung einer WinAPI keinen Unterschied machen, welche DelphiVersion es ist.
Und zwischen D10 und D11 sollte es auch keine großen Unterschiede geben, was z.B. die Einstellungen der PE oder des Windows-Manifests angeht, also was sich z.B. auf die Virtualisierung "alter" Programme auswirken würde (XP-Mode usw.).
Indy verwenden wir aus dem Grund seit Jahren nicht.
Was mich verwundert ist, dass es einmal geht und einmal nicht. Immer nach einem NEustart (bisher so beobachtet). Also einmal geht es zuverlässig während derselben Laufzeit, startet man neu, geht es vielleicht nicht oder schon. Aber immer bis zum Ende der Laufzeiten.

Stefan
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
66 Beiträge
 
#7

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 14:12
ein und dieselbe EXE funktioniert auf einem Computer, auf einem anderen nicht. Und irgendwann geht sie dann wieder.
Könnte dann aber auch an ASLR liegen - das sorgt nämlich für ein verändertes Umfeld bei jedem Start. Einfach mal probeweise in den Linker-Optionen abschalten.

Sollte es damit dann funktionieren, liegt der Fehler aber nicht in dieser Einstellung, sondern im (vermutlich eigenen) Code. Das Flag macht ihn halt nur sichtbar. Ursache könnte z.B. die Verwendung von Integer sein, wo eigentlich Cardinal hingehört.

Danke für den Hinweis, ich werde das gleich ausprobieren. Und das würde auch erklären, dass es einmal (100% der Fälle zur selben Laufzeit) geht oder nicht geht. Ich setze einfach mal das ASLR auf false. Aber verstehe ich das jetzt richtig: Es kann sein, dass es jetzt nie geht?

Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#8

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 14:24
Das R impliziert ja eine gewisse Zufälligkeit. Dass es nie geht ist somit genauso unwahrscheinlich wie dass es immer geht. (Wenn es denn überhaupt daran liegt)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
66 Beiträge
 
#9

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 14:29
Das R impliziert ja eine gewisse Zufälligkeit. Dass es nie geht ist somit genauso unwahrscheinlich wie dass es immer geht. (Wenn es denn überhaupt daran liegt)
Wenn ich es richtig verstehe, betrifft es aber immer nur das geladene Prozessimage sowie nachgeladene DLLs, die unterschiedliche zufällige Speicherbereiche zugewiesen bekommen. Wenn es aber mal läuft (und nicht dynamisch entladen oder geladen wird), dann würde alles an derselben Stelle bleiben? Insofenr verstünde ich, dass es bei einem Programmlauf geht, beim nächsten vielleicht nicht.

Andererseits weiß ich nicht, ob die Windows API für HTTP Requests dynamisch oder statisch geladen wird.

Nur zur Sicherheit: Wenn ich wirklcih einen HTTP/400 zurückbekommen, kann SSL nicht mehr das Problem sein, da ich ja schon das Backend erreiche, es würde mir also reichen, wenn ich den Request an eine HTTP-Seite umlenke und mit Wireshark nachschaue, was der Unterschied in den Headern ist, wenn es geht oder nicht geht. Valider Ansatz?

Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#10

AW: Windows API: HTTP D11 vs. D10

  Alt 18. Jul 2023, 14:32
Ja, dann könnte man immerhin sehen, was am anderen Ende ankommt, und daraus weitere Schlüsse ziehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz