AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke HTTP Header auslesen. Ohne Indy
Thema durchsuchen
Ansicht
Themen-Optionen

HTTP Header auslesen. Ohne Indy

Ein Thema von Cubysoft · begonnen am 26. Jan 2016 · letzter Beitrag vom 27. Mai 2016
Antwort Antwort
Seite 1 von 2  1 2      
Cubysoft

Registriert seit: 5. Sep 2014
Ort: Ludwigshafen
76 Beiträge
 
Delphi XE8 Professional
 
#1

HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 19:47
Hallo,

ich muss derzeit mit meiner Software mit einer API kommunizieren. Im Header der HTTP Antwort stehen dann Informationen, die ich benötige. Ich hatte diesen Teil bisher immer mit Indy und dem SSL Socket gelöst, aber leider schlagen Virenprogramme (zB Antivir) grundsätzlich immer an, wenn ich diese Klassen verwende. Deshalb suche ich nach einer anderen Möglichkeit, die Daten auszulesen. Ich habe mitlerweile alle API-Anfragen, welche den HTTP Header nicht auslesen müssen auf eine Funktion umgestellt, die mit WININET arbeitet. Leider liefert mir diese Funktion (habe ich nicht selbst geschrieben, nur im Internet gefunden) natürlich nicht den HTTP Header mit.

Deswegen lange Rede kurzer Sinn: Wie kann ich den HTTP Header auslesen ohne Indy zu verwenden? Am besten mit WININET, weil das bisher immer super funktioniert hat!

Das ist die Funktion die ich derzeit benutze (diese liefert keinen Header mit)

Delphi-Quellcode:
function GetUrlContent(const Url: string): UTF8String;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1023] of byte;
  BytesRead: dWord;
  StrBuffer: UTF8String;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi 2009', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(NetHandle) then
    try
      UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if Assigned(UrlHandle) then
        try
          repeat
            InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
            SetString(StrBuffer, PAnsiChar(@Buffer[0]), BytesRead);
            Result := Result + StrBuffer;
          until BytesRead = 0;
        finally
          InternetCloseHandle(UrlHandle);
        end
      else
        raise Exception.CreateFmt('Cannot open URL %s', [Url]);
    finally
      InternetCloseHandle(NetHandle);
    end
  else
    raise Exception.Create('Unable to initialize Wininet');
end;
Vielen Dank für eure Mühe!
Tobias
  Mit Zitat antworten Zitat
Klaus01

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

AW: HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 20:56
.. hilft msdn vielleicht weiter..

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 21:03
In Seattle gibt es den kompletten Wrapper dafür schon
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Cubysoft

Registriert seit: 5. Sep 2014
Ort: Ludwigshafen
76 Beiträge
 
Delphi XE8 Professional
 
#4

AW: HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 21:27
Hab mich mit Wininet noch nicht beschäftigt und das würde auch den Rahmen den Projekts sprengen, wenn ich mich da jetzt so stark einlesen würde. Leider habe ich auch keine ~500€ rumliegen um mal eben DX10 zu kaufen. Deswegen suche ich Hilfe um das mit meiner XE8 hinzubekommen
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 22:54
Erstmal ist HTTP nur das Protokoll und die Verbindung geht über TCP/IP.
Delphi-Referenz durchsuchenTIdTcpIp

Gut, eine Namensauflösung, und noch mehr, ist bei den meisten Komponenten auch gleich mit eingebaut.

Allerdingt bietet doch jede halbwegs ordentliche HTTP-Komponente doch auch einen Zugriff auf den Header?
Delphi-Referenz durchsuchenTIdHttp

Was denn Virenscanner angeht ... njain, tun sie nicht immer
und wenn doch, dann wendet man sich an deren Support, meldet die False-Positive und nach paar Minuten/Stunden/Tagen ist das behoben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Jan 2016 um 22:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 22:55
Die Exe als False Positiv dem Antiviren-Softwarehersteller zu schicken?

Und das Beispiel aus dem MSDN ist ja nicht so schwierig nach Delphi umzusetzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 23:09
um das mit meiner XE8 hinzubekommen
Das konnte ich ja nicht wissen ... steht ja nirgends (Profil, Signatur, Beitrag, ...)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Cubysoft

Registriert seit: 5. Sep 2014
Ort: Ludwigshafen
76 Beiträge
 
Delphi XE8 Professional
 
#8

AW: HTTP Header auslesen. Ohne Indy

  Alt 26. Jan 2016, 23:53
Hallo,

vielen Dank für eure Antworten bisher.

1) Ja ich weiß, dass man das False-Positive melden kann, allerdings ist mir das heute sehr stark aufgefallen. Ich arbeite derzeit mit einem Freund an dem Projekt und der hatte Antivir auf seinem PC. Das alleinige Einbinden der Indy-Units (IdHTTP und die Unit für die SSL Socket, auch von Indy aber weiß den Namen nichtmehr genau) sorgte schon dafür, dass der Virenscanner Alarm schlug. Und da ich weiß, dass es auch anders geht, würde ich hier lieber auf Indy verzichten.

2) Ich habe mir jetzt seit meinem letzten Post den MSDN Artikel angeschaut, bin jetzt aber auch ziemlich müde. Ich verstehe den Code leider absolut nicht. Das könnte daran liegen, dass ich absolut keine Ahnung habe, wie WinInet funktioniert, ca. garkeine C++ Kenntnisse besitze und mir schlecht wird, wenn ich das Wort Buffer lese, weil ich mich vor den Sachen immer gedrückt habe.

Es wäre wirklich hilfreich, wenn ihr mir helfen könntet, meine Funktion die ich derzeit habe noch so zu erweitern, dass sie den Header (zB als TStringList) und den Content zurückgibt und nicht (wie bis jetzt) nur den Content. (Direkt möchte ich einen Customheader auslesen "X-MaxPage", vllt macht das das ganze etwas einfacher)

Vielen Dank für eure Hilfe und Mühe!
Tobias
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: HTTP Header auslesen. Ohne Indy

  Alt 27. Jan 2016, 12:54
Bei Deiner konkreten Frage kann ich Dir nicht helfen, aber statt der Indy-Komponenten könntest Du es mal mit Overbyte ICS versuchen: http://wiki.overbyte.be/wiki/index.php/ICS_Download

Ist Freeware mit Quelltexten und auch für Deine Delphi-Version verfügbar.

Habe es schon mehrfach benutzt (seit Delphi 3) und läuft genauso gut wie die Indys.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: HTTP Header auslesen. Ohne Indy

  Alt 27. Jan 2016, 17:18
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
Der dritte Parameter liefert den Header:
Delphi-Quellcode:
function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar;
  lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD;
  dwContext: DWORD)
Statt nil muss da ein PChar übergeben werden.
  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 21:48 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