Entwickler-Ecke

Internet / Netzwerk - Skydrive und IdHttp.get


Mathematiker - Mi 20.11.13 00:38
Titel: Skydrive und IdHttp.get
Hallo,
bitte "schlagt" mich nicht, aber bei allem, das mit Internet zu tun hat, bin ich blutiger Anfänger und stochere eigentlich nur in der Materie.

Ich habe mit den Indy-Komponenten versucht:

Delphi-Quelltext
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:
procedure TForm1.Button9Click(Sender: TObject);
var idhttp1:tidhttp;
    datei:tfilestream;
begin
    IdHttp1:=tidhttp.create;
    try
      try
        Datei:=TFileStream.create('test.pdf',fmCreate);
        IdHttp1.Get('http://www.kepler.c.sn.schule.de/subj/MA/12Ma4/lk01_b.pdf',Datei);
      finally
        Datei.free;
      end;

      try
        Datei:=TFileStream.create('test.txt',fmCreate);
        IdHttp1.Get('https://skydrive.live.com/redir?reD890F982C539013!105/test.txt',Datei);
        //IO Handler is not valid
      finally
        Datei.free;
      end;

    finally
      IdHttp1.free;
    end;  
end;

Die erste Datei wird problemlos geladen. Bei der zweiten kommt die Fehlermeldung "IO Handler is not valid", was ich nicht verstehe.
Die extrem lange Adresse ist die öffentliche Adresse, "https://skydrive.live.com/redir?reD890F982C539013!105" unter der die Datei test.txt als vorhanden angezeigt wird.

Was mache ich schon wieder falsch?

Beste Grüße
Mathematiker


FinnO - Mi 20.11.13 00:48

Du musst Skydrive nicht auf die komplizierte Tour übers User-Interface verwenden, sondern kannst auch über die dazugehörige API [http://msdn.microsoft.com/en-us/library/live/jj680723.aspx#dir] etwas komfortabler darauf zugreifen.


Mathematiker - Mi 20.11.13 00:51

Hallo,
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
Du musst Skydrive nicht auf die komplizierte Tour übers User-Interface verwenden, sondern kannst auch über die dazugehörige API [http://msdn.microsoft.com/en-us/library/live/jj680723.aspx#dir] etwas komfortabler darauf zugreifen.

Danke für den Hinweis. Den angegebenen Text muss ich erst einmal verarbeiten.
Im Moment verstehe ich so gut wie nichts.

Beste Grüße
Mathematiker


Delete - Mi 20.11.13 01:53

https://skydrive.live.com/redir?reD890F982C539013!105/test.txt
ist nicht mehr vorhanden oder nicht verfügbar...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function DownLoadInternetFile(const SourceUrl, DestFilename : String): Boolean;
const S_OK = 0;
begin
   Result := URLDownloadToFile(nil,PChar(SourceUrl),PChar(DestFilename),0,nil) = S_OK;
end;

procedure TForm1.Button1Click(Sender: TObject);
var fn : String;
begin
fn:='http://www.kepler.c.sn.schule.de/subj/MA/12Ma4/lk01_b.pdf';
if DownLoadInternetFile(fn, 'D:\lk01_b.pdf'then ShowMessage('Download ok');

fn:='https://skydrive.live.com/redir?reD890F982C539013!105/test.txt';
if DownLoadInternetFile(fn, 'D:\test2013.txt'then ShowMessage('Download ok');
end;


Mathematiker - Mi 20.11.13 08:05

Hallo,
Danke für den Hinweis.
Die erste Datei wird wieder problemlos geladen. Gleichgültig, welche Adresse ich bei der 2. eingebe, geht es nicht.
Die Datei ist im IE sichtbar, bei meinem Download-Versuch nicht mehr. Irgendetwas stimmt mit den Rechten nicht.

Lustig ist, dass ich einmal (nicht reproduzierbar) eine Datei bekam, nur nicht meine, sondern eine, mit der ich in meinen privaten(!) Skydrive-Bereich gelange.

Und schon habe ich wieder ein neues Verständnisproblem. Ich beende erst einmal die Versuche, von Skydrive was zu lesen, lege die Datei auf den Schulserver und weiß, dass es dort problemlos funktioniert.

Danke und beste Grüße
Mathematiker


jaenicke - Mi 20.11.13 09:36

Um https nutzen zu können, muss auch der passende IO Handler da sein, deshalb auch die Fehlermeldung. Konkret musst du dir dafür einen IO Handler vom Typ TIdSSLIOHandlerSocketOpenSSL nehmen und in deiner TIdHttp Komponente zuweisen. Den kannst du auf dein Formular bzw. besser Datenmodul packen. Dazu brauchst du dann noch die OpenSSL DLLs.


Mathematiker - Mi 20.11.13 10:49

Hallo jaenicke,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Um https nutzen zu können, muss auch der passende IO Handler da sein, deshalb auch die Fehlermeldung. ...

Jetzt habe ich es verstanden, warum es gar nicht so einfach gehen kann.
Ich hätte vielleicht vorher mal (http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure) lesen sollen. :autsch:
Aus diesem Grund werde ich auch (vorerst) aufgeben. Das übersteigt meine Möglichkeiten im Moment. Irgendwann wird's auch noch.

Beste Grüße und Danke
Mathematiker


jaenicke - Mi 20.11.13 11:34

Das ist nicht schwer, ich habe die beiden notwendigen Schritte doch schon genannt...
  1. Den TIdSSLIOHandlerSocketOpenSSL aufs Formular legen oder manuell erzeugen und der Eigenschaft IOHandler von deiner TIdHttp Komponente zuweisen
  2. Die DLLs holen, z.B. von hier:
    http://indy.fulgan.com/SSL/openssl-1.0.1e-i386-win32.zip

Das war es auch schon...