AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Datei mit PUT an HTTP-Server senden plus *Authentifizierung*

Datei mit PUT an HTTP-Server senden plus *Authentifizierung*

Ein Thema von mashutu · begonnen am 14. Jun 2008 · letzter Beitrag vom 15. Jun 2008
Antwort Antwort
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#1

Datei mit PUT an HTTP-Server senden plus *Authentifizierung*

  Alt 14. Jun 2008, 09:41
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:
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;
Des weiteren benoetige ich neben Get und Put auch noch DELETE, was die TidHTTP-Componente nicht als Methode anbietet (Stichwort CRUD)

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]
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#2

*Authentifizierung* geloest - aber CRUD (DELETE) gesucht

  Alt 14. Jun 2008, 12:32
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
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#3

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 14. Jun 2008, 13:02
Wieso implementierst du es nicht einfach selbst mit der Client-Komponente?
Müsste doch recht einfach sein.
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#4

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 14. Jun 2008, 13:04
Zitat von Torpedo:
Wieso implementierst du es nicht einfach selbst mit der Client-Komponente?
Müsste doch recht einfach sein.
wie ich oben schon schrieb, habe ich noch nichts mit Net-Entwicklung am Hut gehabt.
Somit weiss ich auch nicht, was Du damit genau meinst.

Kannst Du das bitte erlaeutern - Danke?
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#5

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 14. Jun 2008, 13:07
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.
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#6

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 14. Jun 2008, 14:12
@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
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 14. Jun 2008, 14:25
wie kommst du jetzt auf DELETE? wenn ich den Ausgangspost lesen hast du einfach nur was falsch gemacht:
Zitat:
Versucht habe ich TidHTTP mit ProxyParams und Authentication, beides fuehrt jedoch zu Fehler 401 "Unauthorized"... (bzw. ResponseText: 'couldn't authenticate you')
Die ProxyParams beziehen sich ausschließlich auf den Proxyserver. Für die BasicAuthentication etc. musst du Benutzername und Passwort bei "Request" eintragen. IdHttp.Request.BasicAuthentication auf True setzen und IdHttp.Request.Username sowie IdHttp.Request.Password setzen.
Wenn die Authentifizierung über die Post-Parameter geschieht musst du diese als Feld mitsenden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#8

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 14. Jun 2008, 15:27
Zitat von SirThornberry:
wie kommst du jetzt auf DELETE?
Weil ich auch einen Delete-command absenden koennen muss.

Zitat von SirThornberry:
wenn ich den Ausgangspost lesen hast du einfach nur was falsch gemacht:
Zitat:
Versucht habe ich TidHTTP mit ProxyParams und Authentication, beides fuehrt jedoch zu Fehler 401 "Unauthorized"... (bzw. ResponseText: 'couldn't authenticate you')
Die ProxyParams beziehen sich ausschließlich auf den Proxyserver.
Ja, ich habe es auch ueber einen Proxy versucht, nachdem es ueber den direkten Weg nicht gefunzt hat.

Zitat von SirThornberry:
Für die BasicAuthentication etc. musst du Benutzername und Passwort bei "Request" eintragen. IdHttp.Request.BasicAuthentication auf True setzen und IdHttp.Request.Username sowie IdHttp.Request.Password setzen.
Wenn die Authentifizierung über die Post-Parameter geschieht musst du diese als Feld mitsenden.
Das habe ich bereits so gemacht, aber ich bekomme trotzdem nur manchmal den connect. Meist erhalte ich die Meldung: "couldn't authenticate you"

Und das Loeschen konnte ich noch nicht so testen, wie es torpedo schrieb, weil mich aus unerfindelichen Grurnden der Server dauernd abweist...
Delphi-Quellcode:
        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;
Aber ich lasse mich gerne belehren, falls hier noch etwas grob falsch sein sollte...
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 14. Jun 2008, 22:24
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#10

Re: Datei mit PUT an HTTP-Server senden plus *Authentifizier

  Alt 15. Jun 2008, 10:31
Zitat von SirThornberry:
Wenn ich das so sehe kommt der Verdacht auf das du eventuell nicht ganz weißt wozu welche Methoden da sind.
Sollte ich mich tatsaechlich als Depp geoutet haben? :-)
(Eigentlich weiss ich, was ich tue...

Zitat von SirThornberry:
Es ist sehr unwahrscheinlich das du bei einer Seite alle 3 Methoden benötigst.
Warum?
Zitat von SirThornberry:
Um dir konkret helfen zu können brauchen wir mehr Informationen.
Um welche Seite handelt es sich?
OpenStreetMap.org
Zitat von SirThornberry:
kann man mit einem normalen Browser auf die Seite zugreifen und sich da einloggen?
Ja-
Zitat von SirThornberry:
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?
Es gibt einen offenen Bereich und einen gescheutzten Bereich. In den geschutzten Bereich - das Editieren der Karte - kommt man ueber ein Login-Fenster.

Zitat von SirThornberry:
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.
Darum geht es ja gar nicht (mehr). Sondern um das DELETE, das nicht funzt.
Zitat von SirThornberry:
Es wäre auch interessant zu wissen welche Delphiversion und Indyversion du nutzt.
Delphi 2006 - Indy 10.1

Die Beschreibung, was ich machen soll findet sich hier:
OSM Protocol

Ausschnitt
----------------------cut--------------------
Code:
 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---------------------
Danke fuer Eure Muehe

Edit: Tabelle lesbarer gestaltet
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:45 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