Datei mit PUT an HTTP-Server senden plus *Authentifizierung*
Servus ich moechte eine Datei an einen HTTP-Server mit Put senden.
Komponenten dazu gibt es ja (Indy,Socket), allerdings muss ich mich mit Username und Passwort authentifizieren und habe bei den Komponenten nirgends die Moeglichkeit gesehen, wo ich diese beiden Parameter mit angeben kann - so dass es funktioniert: Versucht habe ich TidHTTP mit ProxyParams und Authentication, beides fuehrt jedoch zu Fehler 401 "Unauthorized"... (bzw. ResponseText: 'couldn't authenticate you')
Delphi-Quellcode:
Des weiteren benoetige ich neben Get und Put auch noch DELETE, was die TidHTTP-Componente nicht als Methode anbietet (Stichwort CRUD)
httpLink.OnAuthorization:=auth;
procedure TfrmHttpConn.Auth (Sender: TObject; Authentication: TIdAuthentication; var Handled: Boolean); begin Authentication.Username:=eUsername.Text; Authentication.Password:=ePassword.Text; Handled:=true; end; Habe zwar schon viel Programmiererfahrung, aber eben noch nicht mit den Internetkomponenten... daher ist die grosse Auswahl an vorhandenen Komponenten fuer mich (noch) etwas verwirrend. Wichtig ist fuer mich, dass ich die Antwort auf meinen PUT-Befehl (die kommt im XML-Format) erhalte. Danke fuer Eure Hilfe [Edit Formulierung der Frage klarer gemacht und Code beigefuegt] |
*Authentifizierung* geloest - aber CRUD (DELETE) gesucht
Da mein Username fuer den betreffenden Dienst ein Sonderzeichen beinhaltet, musste ich dieses via
%nn codiert versenden wobei nn fuer die hexadezimale Schreibweise des Sonderzeichens steht. :-) Nach wie vor kann ich jedoch nur GET und PUT mit TidHTTP durchfuehren. Welche Komponente bietet mir die Meoglichkeit nach dem CRUD-Schema auch ein DELETE zu versenden? http://de.wikipedia.org/wiki/CRUD Danke fuer eure Hilfe |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
Wieso implementierst du es nicht einfach selbst mit der Client-Komponente?
Müsste doch recht einfach sein. |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
Zitat:
Somit weiss ich auch nicht, was Du damit genau meinst. Kannst Du das bitte erlaeutern - Danke? |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
Ich weiß jetzt nicht genau wie PUT und DELETE funktionieren, aber der Rest von HTTP ist ziemlich einfach.
Du verbindest dich mit der Socket-Komponente also einfach zum Webserver an Port 80. Wenn du verbunden bist sendest du z.B. DELETE /datei.html HTTP/1.1 (oder wie auch immer der Befehl lautet) Dann schickt dir der Server eine Antwort zurück, die du in einem Event der Komponente empfängst und auswerten kannst. |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
@Torpedo: Ich glaube ich habe verstanden, was Du meinst.
Kann das jetzt allerdings gerade nicht (mehr) testen, da mich der Server nicht mehr reinlaesst. Habe wohl durch meine Testerei die anzahl ungueltiger Logins von dieser IP ueberschritten. Melde mich noch mal - Danke fuers Erste |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
wie kommst du jetzt auf DELETE? wenn ich den Ausgangspost lesen hast du einfach nur was falsch gemacht:
Zitat:
Wenn die Authentifizierung über die Post-Parameter geschieht musst du diese als Feld mitsenden. |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
Zitat:
Zitat:
Zitat:
Und das Loeschen konnte ich noch nicht so testen, wie es torpedo schrieb, weil mich aus unerfindelichen Grurnden der Server dauernd abweist...
Delphi-Quellcode:
Aber ich lasse mich gerne belehren, falls hier noch etwas grob falsch sein sollte...
httpLink.Request.BasicAuthentication:=true;
httpLink.Request.Password:=ePassword.Text; httpLink.Request.Username:=cleanupHTMLAuth(eUsername.Text);//cleanup special chars Moutput.Lines.Clear; //Memo with result of op case rgMethod.ItemIndex of //what did user choose 0:begin httpLink.request.Method:=Id_HTTPMethodPut; Moutput.Lines.Text:=httpLink.Put(eURL.text,x); end; 1:begin httpLink.request.Method:=Id_HTTPMethodGet; Moutput.Lines.Text:=httpLink.Get(eURL.text); end; 2:begin s:=eURL.text; httpLink.Request.Method:=Id_HTTPMethodDelete; s:=httpLink.Put(s,xDummy); moutput.Lines.Add(s); end; |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
Wenn ich das so sehe kommt der Verdacht auf das du eventuell nicht ganz weißt wozu welche Methoden da sind.
Es ist sehr unwahrscheinlich das du bei einer Seite alle 3 Methoden benötigst. Um dir konkret helfen zu können brauchen wir mehr Informationen. Um welche Seite handelt es sich? kann man mit einem normalen Browser auf die Seite zugreifen und sich da einloggen? Und wenn ja: Wie sieht der Login aus? Trägt man die Daten auf der Webseite ein oder kommt vom Browser ein Fenster wo der geschützte Bereich beschrieben wird und nur ein Benutername + Passwort verlangt wird? Bei den meisten Webseiten wo man sich auch per Browseroberfläche einloggen kann trägt man die Logindaten auf der Webseite ein. Diese werden dann über das definierte Formularfeld übergeben. Wenn dies bei dir der Fall ist muss man sich den Quelltext der Seite anschauen um zu sehen welche Formularfelder es gibt und wie die Felder für Benutzername und Passwort heißen. Es wäre auch interessant zu wissen welche Delphiversion und Indyversion du nutzt. |
Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier
Zitat:
(Eigentlich weiss ich, was ich tue... Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Die Beschreibung, was ich machen soll findet sich hier: OSM Protocol Ausschnitt ----------------------cut--------------------
Code:
Danke fuer Eure Muehe
Basic Methods for Object Access and Manipulation
For each of the above-mentioned object types, the API supports these CRUD operations (replace <objtype> by one of node, way, relation; replace <id> by the id of the object in question): .....................................................Payload Purpose_________HTTP Method and URL_______________Request_______Response Creation________PUT /api/0.5/<objtype>/create____XML per DTD___id Retrieval_______GET /api/0.5/<objtype>/<id>______n/a___________XML per DTD Update__________PUT /api/0.5/<objtype>/<id>______XML per DTD___empty Deletion________DELETE /api/0.5/<objtype>/<id>______n/a___________n/a ----------------------cut--------------------- Edit: Tabelle lesbarer gestaltet |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 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