![]() |
AW: Windows API: HTTP D11 vs. D10
Zitat:
|
AW: Windows API: HTTP D11 vs. D10
Zitat:
|
AW: Windows API: HTTP D11 vs. D10
Zitat:
Zitat:
![]() Wurde zumindestens von Mehreren so gesagt. |
AW: Windows API: HTTP D11 vs. D10
Zitat:
Seit jeher ist die lokale Variable var accept: Array[0..1] of PAnsiChar; ... accept[0]:=PAnsiChar('*/*'); accept[1]:=PAnsiChar(#0); ... hRequest := HttpOpenRequestA(hConn, 'GET', PAnsiChar(fUrlPath+fExtraInfo), HTTP_VERSION, nil, @accept, connFlags, 42); ich habe das auf packed array geändert, den Rest des Codes gleich gelassen (Zuweisung, PAnsiChar, HttpOpenRequestA), et voilà, es funktioniert. Kann mir wer erklären, warum das bisher funktioniert hat? |
AW: Windows API: HTTP D11 vs. D10
Zitat:
Array und Packed-Array sollten hier keinen Unterschied haben, da Pointer quasi immer packed sind (weil sie keine ungerade unausgerichtete Größe besitzen, also immer bereits ausgerichtet sind und es somit auch keine Lücke gibt) Laut Dokumentation ist die #0 aber nicht ganz richtig.
Delphi-Quellcode:
accept[0] := PAnsiChar('*/*');
accept[1] := nil; // ein Zeiger auf NICHTS, während PChar(#0) ein Zeiger auf einen String aus einem #0 ist (eigentlich aus zwei #0, inkl. dem PChar-Terminator) Zitat:
|
AW: Windows API: HTTP D11 vs. D10
Zitat:
Ich habe im Delphi 10-Projekt auch einmal den Request auf HTTP umgebogen und erhalte immer einen sauberen Accept-Header. Keinen Datenmüll. Kleine Beobachtung. Anscheinend war das Array immer etwas länger in D11, denn es kommen doch sehr regelmäßig Kommata im kaputten Accept-Header vor. Der Datenmüll ist auch immer derselbe, das Array hat offenbar 6 Elemente (das abschließende #0 nicht mitgezählt). Zitat:
:?: |
AW: Windows API: HTTP D11 vs. D10
Delphi-Quellcode:
sollte eigentlich das Gleiche liefern, egal ob
ShowMessage(SizeOf(accept).ToString);
Delphi-Quellcode:
oder
var accept: array[0..1] of PAnsiChar;
Delphi-Quellcode:
.
var accept: packed array[0..1] of PAnsiChar;
Delphi-Quellcode:
accept[0] := '*/*';
Echte Konstanten (untypisierte Konstante) lassen sich auch direkt an PChar/PAnsiChar/PWideChar übergeben. z.B. macht es keinen Unterschied, ob
Delphi-Quellcode:
oder
ShellExecute(0, 'OPEN', ...
Delphi-Quellcode:
.
ShellExecute(0, PChar('OPEN'), ...
|
AW: Windows API: HTTP D11 vs. D10
Zitat:
Ja, tut es auch, immer 8. Ich verstehe absolut nicht, was hier das ursächliche Problem ist. Danke jedenfalls für euer Feedback! Stefan |
AW: Windows API: HTTP D11 vs. D10
HTTP/400 Bad Request heißt einfach nur, dass das, was der Client an den Server schickt, vom Server nicht korrekt verarbeitet werden kann. "Irgendwas dadrin ist faul". Dies bezieht sich nicht nur auf die Url, sondern auf den gesamten Inhalt der Anfrage.
Zitat:
Beim Aufbau des Headers muss irgendwas schieflaufen. Ein paar mögliche Ursachen wurden schon genannt. Und da das "Schieflaufen" sich bei jedem Programmstart irgendwie anders auswirkt, hast Du das Problem: Mal geht's, mal nicht, also das typische: Fehler ist nicht reproduzierbar, aber tritt regelmäßig auf. Mögliche Ursache: Nicht sauber terminierte PChars, so dass da dann noch Teile dessen enthalten sind, was da gerade so zufällig im Arbeitsspeicher hinter dem PChar "rumliegt". Wenn Du mal 'nen Header hier posten könntest und den vollständigen Quelltext zum Aufbau der Anfrage, wäre es eventuell möglich zu schauen, wo es da "klemmt". |
AW: Windows API: HTTP D11 vs. D10
Zitat:
Den Header habe ich nicht mehr, hab den Debugcode schon rausgenommen, aber es war immer derselbe Datenmüll. Wir verwenden es jetzt mit einem packed array und sind zufrieden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz