| Autor |
Beitrag |
Amalia
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: Sa 23.09.06 20:29
Hallo,
ich hab grad euer Forum entdeckt und wollte gleich mal mit einer Frage in Erscheinung treten:
Ich würde gerne verschiedene Webseiteninformationen mit meinem Delphi-Programm auslesen, speziell Typ, Kodierung, Größe, Modifizierdatum und alle enthaltenden Grafiken. So in etwas wie es der FF auch macht (siehe Screenie). Wie könnte ich diese Daten am besten mit meinem Programm auslesen?
Freue mich über jeden Vorschlag / Idee. 
Einloggen, um Attachments anzusehen!
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: So 24.09.06 20:31
Hat keiner nen Tipp oder kleinen Ansatz für mich?
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: So 24.09.06 20:32
Das müsste mit der idHTTP gehen.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
marconist
      
Beiträge: 25
xp sp2
D5 pers
|
Verfasst: So 24.09.06 20:33
Hallo,
die Daten stehen teils im http header, teils im html header und teils im html body.
Mein Programm, das dies alles anzeigt, baut auf der tclientsocket Komponente auf. Die übertragenen strings zu analysieren ist ja kein Problem.
sieht ungefähr so aus:
request:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| GET / HTTP/1.0 Host: www.delphi-forum.de
http header: HTTP/1.1 200 OK Date: Sun, 24 Sep 2006 18:17:20 GMT Server: Apache/2.0.54 (Linux/SUSE) X-Powered-By: PHP/4.3.11 Cache-Control: no-cache, pre-check=0, post-check=0 Expires: 0 Pragma: no-cache Connection: close Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> html header: <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Style-Type" content="text/css">
<meta name="DC.creator" content="Tino Teuber"> <meta name="DC.date.created" content="2004-11-05"> <meta name="DC.description" content="In diesem Programmierforum treffen sich Delphi Entwickler um Hilfe zu erhalten und zu geben."> <meta name="DC.format" content="text/html"> <meta name="DC.language" content="de"> <meta name="DC.publisher" content="Tino Teuber"> <meta name="DC.rights" content="Copyright © Tino Teuber, 2002 - 2006."> <meta name="DC.subject" content="In diesem Programmierforum treffen sich Delphi Entwickler um Hilfe zu erhalten und zu geben."> <meta name="DC.title" content="Delphi-Forum.de"> <meta name="DC.type" scheme="DCMIType" content="Text"> <meta name="abstract" content="Deine freundliche Delphi Community"> <meta name="audience" content="all"> <meta name="author" content="Tino Teuber"> <meta name="copyright" content="Copyright © Tino Teuber, 2002 - 2006."> <meta name="description" content="In diesem Programmierforum treffen sich Delphi Entwickler um Hilfe zu erhalten und zu geben."> <meta name="keywords" content="delphi, forum, board, faq, tutorial, pascal, delphilanguage, programmierung, programmieren, tutorials, borland, diskussionsforum, fragen, antworten, experten, windows, linux, kylix, api, debugger, fehler, lösungen, sql, datenbanken, multimedia, directx, algorithmen, suchen, sortieren, bäume, listen, prozedur, funktion, procedure, function, vcl, komponente"> <meta name="page-type" content="faq"> <meta name="publisher" content="Tino Teuber"> <meta name="revisit-after" content="2 days"> <meta name="robots" content="index,follow"> <link rel="shortcut icon" href="./favicon_df.ico"> <link rel="stylesheet" type="text/css" href="styles/common.css"> <link rel="stylesheet" type="text/css" href="styles/main.css"> <link rel="stylesheet" type="text/css" href="styles/styles_others.css">
<link rel="alternate" type="application/rss+xml" title="Alle Beiträge" href="rss.php"> <link rel="alternate" type="application/rss+xml" title="Delphi- & C-Sharp-Forum.de News" href="rss.php?f=2"> <link rel="alternate" type="application/rss+xml" title="Neuigkeiten" href="rss.php?f=42"> <link rel="top" href="./index.php?sid=585b0d68604099b8b16c28ef72fd4b9b" title="Delphi-Forum.de Sparten-Übersicht"> <link rel="search" href="./search.php?sid=585b0d68604099b8b16c28ef72fd4b9b" title="Suche"> <link rel="help" href="./faq.php?sid=585b0d68604099b8b16c28ef72fd4b9b" title=""> <link rel="author" href="./memberlist.php?sid=585b0d68604099b8b16c28ef72fd4b9b" title="Mitgliederliste">
<title>Delphi-Forum.de - Deine freundliche Delphi Community</title> <script language="JavaScript" type="text/JavaScript" src="./scripts/common.js"></script> </head> <body> .... </body> |
srs,
marconist
Moderiert von raziel: Code-Tags hinzugefügt
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: So 24.09.06 20:36
Hallo marconist,
| Zitat: | http header:
HTTP/1.1 200 OK
Date: Sun, 24 Sep 2006 18:17:20 GMT
Server: Apache/2.0.54 (Linux/SUSE)
X-Powered-By: PHP/4.3.11
Cache-Control: no-cache, pre-check=0, post-check=0
Expires: 0
Pragma: no-cache
Connection: close
Content-Type: text/html |
Das wär schonmal ein Anfang. Hast du da mal ein bisschen Code für mich wie man das machen könnte? Quelltext auslesen ist ja kein Problem...
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: So 24.09.06 20:40
Wemm ich recht gelesen habe, dann geht es auch mit HTTPQUERYINFO. Wird aber etwas aufwendiger als Komponenten zu benutzen sein.
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: So 24.09.06 20:49
Hallo wulfskin, danke erstmal für die Info. Ich hab mich mal durchs MSDN gekämpft und bin bei
Delphi-Quelltext 1: 2: 3:
| function HttpQueryInfo(hRequest: HINTERNET; dwInfoLevel: DWORD; lpvBuffer: Pointer; var lpdwBufferLength: DWORD; var lpdwReserved: DWORD): BOOL; stdcall; | hängengeblieben. Leider bin ich nicht so bewandert in Delphi (hab erst vor kurzem bedingt durch die Ausbildung damit begonnen), kannst du mir mal einen Beispielaufruf geben? Vielen Dank.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 24.09.06 21:05
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
marconist
      
Beiträge: 25
xp sp2
D5 pers
|
Verfasst: So 24.09.06 21:05
Den http header bekommst du über den socket ganz gleich wie die html source. Die Daten kann man dann verarbeiten wie man will.
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var intext:string;
begin
slog('read'); // testoutput
hlog(intext); // testoutput
// ....... Verarbeitung nach Wunsch
end;
Wenn du konkrete Fragen hast, kannst du sie gerne stellen.
srs,
marconist
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: So 24.09.06 21:14
Den Quellcode lese ich bis jetzt mit idHTTP aus. Mit den Sockets habe ich bis jetzt noch gar nicht gearbeitet, weiß daher leider auch nicht wie ich deinen Code verwenden solle.
Kannst du mir bitte genauer helfen, ich mcöhte doch nur fix diese Header-Daten auslesen...
|
|
marconist
      
Beiträge: 25
xp sp2
D5 pers
|
Verfasst: So 24.09.06 21:18
gern, wenn du genauere Fragen stellst.
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: So 24.09.06 21:20
Wie muss der Quellcode lauten mit dem ich die Header-Informationen einer Webseite auslesen kann? 
|
|
marconist
      
Beiträge: 25
xp sp2
D5 pers
|
Verfasst: Mo 25.09.06 05:04
Ja durch wiederholen werden solche Fragen nicht genauer, sondern nur, wenn man präzisiert, wie weit man gekommen ist und was der nächste Teilschritt ist, der Probleme bereitet. Welcher Befehl macht dier denn ein Problemchen?
Ich bin davon überzeugt, dass du programmieren lernen willst, und nicht nur nach nützlichen Idioten Ausschau hältst, die dir dein Programm schreiben.
srs,
marconist
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: Mo 25.09.06 19:23
Also praktisch gesehen bin ich noch genauso weit wie am Anfang. Ich habe also die Prozedur Delphi-Quelltext 1: 2: 3:
| function HttpQueryInfo(hRequest: HINTERNET; dwInfoLevel: DWORD; lpvBuffer: Pointer; var lpdwBufferLength: DWORD; var lpdwReserved: DWORD): BOOL; |
Jetzt hab ich im MSDN geguckt welche Konstante alle diese Daten ausliest. Ich bin mir absolut nicht sicher aber es könnte HTTP_QUERY_ALLOW sein. Leider komm ich mit der Funktion aber nicht klar, wo muss ich die URL angeben? Der Typ HINTERNET ist mit gänzlich unbekannt, auch wie und worum ich dort Pointer übergeben soll.
Wäre nett wenn du (oder ein anderer) mir nochmals helfen könnest. 
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 25.09.06 19:34
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: Mo 25.09.06 19:48
@GTA-Place: Ich hatte deinen Beitrag gelesen, von der MSDN-Seite habe ich ja auch die Informationen.
Der andere Link ist ein Beispiel um zu Prüfen ob eine URL existiert, ich kann nicht erkennen wie mir das weiterhelfen soll.
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Di 26.09.06 00:46
Hallo,
ich hab meinen guten Tag heute (naja eigentlich nicht). Aber dabei lernst du wohl nicht so viel: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| function GetHeader(const AURL: String; var ABuf: Pointer; var ABufLength: Cardinal): Boolean; var hInet, hFile: HINTERNET; Dummy: Cardinal; begin Result := False; hInet := InternetOpen('Mein Agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if Assigned(hInet) then begin hFile := InternetOpenUrl(hInet, PChar(AURL), nil, 0, INTERNET_FLAG_EXISTING_CONNECT or INTERNET_FLAG_RELOAD, 0); if Assigned(hFile) then begin Dummy := 0; if HTTPQueryInfo(hFile, HTTP_QUERY_RAW_HEADERS_CRLF, ABuf, ABufLength, Dummy) then Result := True else begin if GetLastError = ERROR_INSUFFICIENT_BUFFER then begin ReallocMem(ABuf, ABufLength); if HTTPQueryInfo(hFile, HTTP_QUERY_RAW_HEADERS_CRLF, ABuf, ABufLength, Dummy) then Result := True; end; end; InternetCloseHandle(hFile); end; InternetCloseHandle(hInet); end; end;
procedure TForm1.Button2Click(Sender: TObject); const BUF_LENGTH = 100; var Buf: PChar; Length: Cardinal; begin GetMem(Buf, BUF_LENGTH); Length := BUF_LENGTH; if GetHeader('http://www.google.de', Pointer(Buf), Length) then ShowMessage(Buf); FreeMem(Buf); end; | Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
marconist
      
Beiträge: 25
xp sp2
D5 pers
|
Verfasst: Di 26.09.06 05:31
Die Definition von httpqueryinfo in pascal steht in der unit wininet.pas. Die bindest du mit uses ein und ab dann kannst du mit "deklaration suchen" alle Elemente in ihrer Delphi definition ansehen.
Die Parameter von httpqueryinfo sind in der msdn library doch detailliert erklärt.
msdn.microsoft.com/l...yinfo.asp?frame=true
| Zitat: | | Der Typ HINTERNET ist mit gänzlich unbekannt, auch wie und worum ich dort Pointer übergeben soll. |
1.Parameter laut msdn | Zitat: | hRequest
[in] Handle returned by HttpOpenRequest or InternetOpenUrl. | | Zitat: | | Jetzt hab ich im MSDN geguckt welche Konstante alle diese Daten ausliest. Ich bin mir absolut nicht sicher |
3.Parameter laut msdn | Zitat: | lpvBuffer
[in, out] Pointer to a buffer to receive the requested information. This parameter must not be NULL. |
Steht doch tatsächlich ALLES da, Du hast das noch nicht wirklich gelesen.
srs,
marconist
|
|
Amalia 
Hält's aus hier
Beiträge: 11
WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
|
Verfasst: Di 26.09.06 21:49
Danke @all, ich werd mich nochmal etwas mehr damit beschäftigen. 
|
|
|