| Autor |
Beitrag |
elron
      
Beiträge: 34
WIN XP
D5 Standard
|
Verfasst: Sa 19.11.05 14:15
Hallo erstmal
ich habe ein kleines problem mit einem Http-Request (1.1):
so dürfte ja ein Get-Request aufgebaut sein, oder?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| GET /<file> HTTP/1.1 Host: <url> Referer: http://<url>/<file> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Connection: close Proxy-Connection: keep-alive Pragma: no-cache Cache-Control: no-cache |
naja, und dann habe ich das mal versucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Socket.SendText('GET /' + EDoc.Text + ' HTTP/1.1' + #10#13 + 'Host: ' + EHost.Text + #10#13 + 'Referer: http://' + EHost.Text + '/' + EDoc.Text + #10#13 + 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' + #10#13 + 'Connection: close' + #10#13 + 'Proxy-Connection: keep-alive' + #10#13 + 'Pragma: no-cache' + #10#13 + 'Cache-Control: no-cache' + #10#13 + #10#13); |
jedoch kommt dann immer sowas wie 302 'Moved' (Google) oder 400 'Bad Request' (einige andere Seiten) oder 'Bad Request (Invalid Header Name)' (Microsoft)
was hab ich denn da falsch gemacht?
P.S.: Indy möchte ich eher ungerne verwenden,es geht nur um eine einfache Textdatei
_________________ JAJA, ich weiß, ich bin ein Anfänger...
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 19.11.05 16:09
Bei Indy wäre das einfach IdHTTP.Get('www.xyz.de/mydatei.php');
Wie das bei Sockets ist weiß ich allerdings nicht. Vielleicht
ist das ja so Ähnlich.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
elron 
      
Beiträge: 34
WIN XP
D5 Standard
|
Verfasst: So 20.11.05 07:20
nö, ich habs nen bisschen anders gemacht:
Delphi-Quelltext 1: 2: 3: 4:
| ClientSocket1.Port := 80; ClientSocket1.Host := EHost.Text; ClientSocket1.Open; MAusgabe.Lines.Add('Verbindung aufgebaut...'); |
und dann muss das ganze gesendet werden...
nur irgendwo ist da nen fehler, denn bei 99% der seiten kommt 302 und bei 1 % 400
//edit:
genau, und nochwas: wie kann man fehlermeldungen der Klasse ESocketError unterdrücken?
ich habs mal hiermit versucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| try begin ClientSocket1.Port := 80; ClientSocket1.Host := EHost.Text; ClientSocket1.Open; ... end; except on ESocketError do showmessage('Fehler!'); end; end; |
ur leider geht das nicht
_________________ JAJA, ich weiß, ich bin ein Anfänger...
|
|
elron 
      
Beiträge: 34
WIN XP
D5 Standard
|
Verfasst: Di 22.11.05 15:41
niemand eine idee???
zumindest bei der unteren frage müsste das doch irgendwie machbar sein...
(unterdrückung von Exceptions "ESocketError")
_________________ JAJA, ich weiß, ich bin ein Anfänger...
|
|
marconist
      
Beiträge: 25
xp sp2
D5 pers
|
Verfasst: Do 01.12.05 21:03
Socket errors abfangen:
du definierst eine onerror procdure. Dort reagierst du auf dien Fehler und setzt die Variable errorcode schliesslich auf 0.
http request:
dein referer ist gleich dem angeforderten file, das könnte so manchen Server stören.
für eine weitere Fehlersuche müsstest du schon die jeweiligen requests zeichen für zeichen genau wiedergeben und die jeweilige Serverantwort vollständig dazu. Erst dann kann man das analysieren und testen.
error 302
das kann alle möglichen Ursachen haben. Wenn ich google.com anfordere, werde ich mit 302 auf google.at umgeleitet. Wenn ich google.at anfordere, kommt 200 OK.
srs
marconist
|
|
elron 
      
Beiträge: 34
WIN XP
D5 Standard
|
Verfasst: Do 01.12.05 23:28
ja, nur wie mach ich denn die prozedur?
oder besser gesagt: wie wird die aufgerufen?
_________________ JAJA, ich weiß, ich bin ein Anfänger...
|
|
marconist
      
Beiträge: 25
xp sp2
D5 pers
|
Verfasst: So 04.12.05 18:32
ja so wie du sonst immer eine Ereignisprozedur machst.
Ich fürchte, so ganz verstehe ich die Frage nicht, aber gut, ich versuchs.
Ich nehme mal stark an, dass wir von einem tclientsocket sprechen:
Erstellen
Du markierst den clientsocket auf dem Formularentwurf. Im Objekinspektor markierst du die Karte Ersignisse. Dort doppelclixt du rechts neben onerror un schon macht dir delphi den Quelltext auf, wo es schon das Gerüst der ClientSocket1Error procedure hineingemalt hat. Dort codest du die Fehlerbehandlung und das Zurücksetzen des errorcode auf 0 hinein. Bei Fragen, ruhig mal F1 drücken, die Delphihilfe ist recht gut, wenn man erst mal die Begriffe weiss. in der Hilfe stehen auch massenhaft Minibeispiele.
Aufruf
Ein socket fehler passiert, und das ruft dann die procedure schon auf.
Vielleicht ist es hilfreich vorerst ein paar ganz kleine Einsteigeprojekte zu schreiben, um mit den Grundlagen vertraut zu werden.
srs
marconist
|
|
elron 
      
Beiträge: 34
WIN XP
D5 Standard
|
Verfasst: Mo 05.12.05 21:54
Edit: Hab es übersehen...
Aber wie genau mache ich so eine Prozedur, denn
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin showmessage('test'); end; |
liefert mir nichts zurück...
_________________ JAJA, ich weiß, ich bin ein Anfänger...
|
|
elron 
      
Beiträge: 34
WIN XP
D5 Standard
|
Verfasst: Di 06.12.05 18:21
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button1Click(Sender: TObject); Memo1.Lines.Add('GET /' + EDoc.Text + ' HTTP/1.1'); Memo1.Lines.Add('Host: ' + EHost.Text); Memo1.Lines.Add('Referer: http://' + EHost.Text + '/' + EDoc.Text); Memo1.Lines.Add('User-Agent: Mozilla/4.0'); Memo1.Lines.Add('Connection: close'); Memo1.Lines.Add('Proxy-Connection: keep-alive'); Memo1.Lines.Add('Pragma: no-cache'); Memo1.Lines.Add('Cache-Control: no-cache'); Memo1.Lines.Add(''); ClientSocket1.Port := 80; ClientSocket1.Host := EHost.Text; ClientSocket1.Open;
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Socket.SendText(Memo1.Text); Memo1.Lines.Clear; end; |
so hab ich das jetzt mit dem ersten fehler gelöst...
_________________ JAJA, ich weiß, ich bin ein Anfänger...
|
|
caedes
      
Beiträge: 35
Win XP
Delphi 7 Enterprise, C
|
Verfasst: Do 08.12.05 18:45
Mir fällt spontan auf, dass die Steuerungszeichen in falscher Reihenfolge stehen in diesem Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Socket.SendText('GET /' + EDoc.Text + ' HTTP/1.1' + #10#13 + 'Host: ' + EHost.Text + #10#13 + 'Referer: http://' + EHost.Text + '/' + EDoc.Text + #10#13 + 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' + #10#13 + 'Connection: close' + #10#13 + 'Proxy-Connection: keep-alive' + #10#13 + 'Pragma: no-cache' + #10#13 + 'Cache-Control: no-cache' + #10#13 + #10#13); |
Dadurch, dass du es jetzt erst in ein Memo einfügst, werden die Absätze vom Programm generiert, die nämlich so aussehen sollten: #13#10
Außerdem reicht meist schon GET und Host:. Den Rest kann man weglassen, wenn es für den Server nicht relevant ist, welchen Browser man benutzt usw.
|
|