Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   C++ MSN -> TWEENER (https://www.delphipraxis.net/71411-msn-tweener.html)

Tommy 14. Jun 2006 19:38


MSN -> TWEENER
 
Liste der Anhänge anzeigen (Anzahl: 1)
zu erst das:
Ich nutze C++ (bcb 5), deshalb kann es sein, dass ich ein paar Synthaxfehler drinne habe, weil ich es nur jz kurz auf Delphi umändere - weil es ja ca. 0 C++ Foren gibt, wo man auch ma innerhalb von nen paar Jahren ne Antwort erhält...

ZUM eigtl Thema:
zwar ist das nicht der erste Schritt der Anmeldung @msn, aber der einzig interessante für mich, weil der Rest geht:

"Once you have done this you should open a connection with nexus.passport.com, on port 443. [...] After the connection has been established you should send a simple GET request to the server."
--> "GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n"

so - jz gibt es ja verschiedene Möglichkeiten, das anzustellen:

1. (mit Indy Komponente "TCPClient", verlinkt unter Intercept mit "IdConnectionInterceptOpenSSL1")
Delphi-Quellcode:
   IdTCPClient1.Host := 'nexus.passport.com';
   IdTCPClient1.Port := 443;
   IdTCPClient1.Connect();
der Code des OnConnect-Events
Delphi-Quellcode:
 IdTCPClient1.Write('GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n');
der Code des OnWork-Events
AWorkMode: wmRead oder wmWrite - erklären brauch ich das nicht ^^
AWorkCount: int, entspricht der Menge der Empfangenen Bytes
Delphi-Quellcode:
 if(AWorkMode = wmRead)
  {
   char *receive = new char[AWorkCount];
   IdTCPClient1->ReadBuffer(receive,AWorkCount);
  }
hier hab ich das Problem, dass es nicht mal in das OnWork-Event springt - warum weiß ich nicht... :/
<hr>
2.1 (mit Indy Komponente "HTTP")
hier die einfachere Methode
Delphi-Quellcode:
   IDHTTP1.Host := 'nexus.passport.com';
   IDHTTP1.Port := 443;
   IDHTTP1.Get('https://nexus.passport.com/rdr/pprdr.asp');
OnWork:
Delphi-Quellcode:
   if(AWorkMode = wmRead)
    {
     char *receive = new char[AWorkCount];
     IDHTTP1->ReadBuffer(receive,AWorkCount);
{sry für C++ - Synthax - er erstellt nen Buffer und lässt den halt füllen...}
    }
jetzt springt er einmal in das Event, aber hat dort sensationelle NULL (->nil ^^) Bytes zu lesen... :/

2.2
Delphi-Quellcode:
   {Host = '...'; Port = 443;}
   String A := IDHTTP1.Get('https://nexus.passport.com/rdr/pprdr.asp');
-> A ist leer

2.3
Delphi-Quellcode:
   {Host = '...'; Port = 443;}
   IDHTTP1.Head('https://nexus.passport.com/rdr/pprdr.asp');
   String A := IDHTTP1.ResponseText;
-> A == "200 OK"

Meine erste Frage: benutze ich überhaupt die richtigen Komponenten? Und wenn ja, was mach ich falsch? Meiner Meinung nach müssten alle 3 Methoden gehen


Danke,

Tom

PS: Anbei die Anleitung zum MSNP8 Protokoll - zumindest grob ^^

Zacherl 14. Jun 2006 19:57

Re: MSN -> TWEENER
 
Herzlich willkommen in der DP :thumb:

Zum Thema: Bei der Lösung mittels TCP Client: sollte der Port nicht 80 lauten. Das ist der standard HTTP Port.
Was für Fehler kommen eigentlich?

Florian

Tommy 14. Jun 2006 20:00

Re: MSN -> TWEENER
 
Zitat:

Herzlich willkommen in der DP
ty :)

Zitat:

Zum Thema: Bei der Lösung mittels TCP Client: sollte der Port nicht 80 lauten. Das ist der standard HTTP Port.
Der Port lautet immer 443 - steht ja auch immer obendrüber!? (port := 443)

Zitat:

Was für Fehler kommen eigentlich?
keine, er macht halt einfach nichts - passiert alles genau so, wie beschrieben :(
Das ist ja das komische - wenn Fehler kommen würden, dann hätte ich wenigstens ne Chance, zu erkennen, woran es liegt - aber so... :'(

Tommy

Zacherl 14. Jun 2006 20:06

Re: MSN -> TWEENER
 
Zitat:

Der Port lautet immer 443 - steht ja auch immer obendrüber!? (port := 443)
Schon klar, aber du sendest doch über den TCP Client eine HTTP GET Anfrage. Normalerweise müsstest du die an den Port 80 schicken. Versuch das mal.

Ich würde übrigens die Lösung über ein IdHTTP vorziehen. Auch hier mal versuchen als Port 80 zu verwenden.

Tommy 14. Jun 2006 20:15

Re: MSN -> TWEENER
 
Delphi-Quellcode:
   IdHTTP1->Host = "nexus.passport.com";
   IdHTTP1->Port = 80;
   IdHTTP1->Get("https://nexus.passport.com/rdr/pprdr.asp");
so meintest du das?
Wenn ja: er bleibt bei der letzten Anweisung ewig hängen - das hatte ich davor auch schon irgendwnan mal... Das Prog hat zwar 0% CPU-Auslastung, aber reagiert trotzdem nicht mehr...
Es kommt auch nie in ein "OnWork", aber ist verbunden mit dem Host...

Delphi-Quellcode:
IdTCPClient1->Host = "nexus.passport.com"; //MSN->Host;
IdTCPClient1->Port = 80; //443;
IdTCPClient1->Connect();
so brinter bei dem Connect() nen Fehler, weil er sich nicht einloggen kann... Ist ja auch verständlich, weiL der Port 443 nicht umsonst vorgegeben sein wird...

Danke trotzdem...
Tom

Zacherl 14. Jun 2006 20:19

Re: MSN -> TWEENER
 
Achso. Sorry ich hab da glaube ich auch was Falsches gesagt. Du stellst ja eine HTTPS und keine HTTP Verbindung her. Dann stimmt der Port natürlich.
Aber kein Wunder, dass A bei der HTTP Lösung leer ist: Ruf mal die angesprochene Seite im Browser auf: https://nexus.passport.com/rdr/pprdr.asp

Tommy 14. Jun 2006 20:22

Re: MSN -> TWEENER
 
ja, das hab ich auch schon gemacht und auch schon gesehen, dass die Seite leer ist...
aber ich habe immer das gleiche gelesen, wenn ich mal was dazu gefunden hatte - nämlich jedes mal wieder den gleichen 'Link'

Tom

Zacherl 14. Jun 2006 20:34

Re: MSN -> TWEENER
 
An welche Information willst du denn über den Link gelangen?

Tommy 14. Jun 2006 20:37

Re: MSN -> TWEENER
 
Zitat:

HTTP/1.1 200 OK\r\n
Server: Microsoft-IIS/5.0\r\n
Date: Sun, 14 Sep 2003 20:35:16 GMT\r\n
PassportURLs: DARealm=Passport.Net,DALogin=login.passport.com/login2.srf,DAReg=http://register... [truncated]
Connection: Keep-Alive\r\n
Content-Length: 0\r\n
Content-Type: text/html\r\n
Cache-control: private\r\n\r\n
das sollte er wiedergeben - dabei ist das fette nur interessant... das kann man zwar auch statisch machen, aber dann hätte ich an der nächsten stelle ein prob, weil
dann wieder das gleiche passiert...

hier hat sich auch noch ma jmd die Mühe gemacht, das alles aufzuschreiben:

Zitat:

HTTPS is a secure version of the HTTP Protocol.
For the Passport Nexus we have to use a 128-bit SSL Connection
I have created a OCX that does the passport nexus for you, but if you want to slave on it yourself heres what to do:


CODE
{C} We connect to nexus.passport.com on port 443
{>>}GET /rdr/pprdr.asp HTTP/1.0\Newline\Newline
{<<}HTTP/1.1 200 OK\Newline
Server: Microsoft-IIS/5.0\Newline
Date: Mon, 02 Jun 2003 11:57:47 GMT\Newline
Connection: close\Newline
PassportURLs: DARealm=Passport.Net,DALogin=login.passport.com/login2.srf,DAReg=http://register.passport.net/uixpwiz.srf,[USW]Content-Length: 0\Newline
Content-Type: text/html\Newline
Cache-control: private\Newline
\Newline
{C}Passport Nexus closes the connection
(Quelle: http://72.14.221.104/search?q=cache:...e&ct=clnk&cd=4)

--> es MUSS gehen
Tom

Waldteufel 14. Jun 2006 20:39

Re: MSN -> TWEENER
 
Hi Tommmmmmmmmmmmy.

Die erste Variante funktioniert vermutlich nicht, denn '\r\n\r\n' ist in Delphi ein String mit vier Backslashes und r's und n's dazwischen. In C/C++/C#/Java/Perl/Ruby/... ist es aber die Zeichenfolge #13#10#13#10 (#13 = Wagenrücklauf; #10 = Zeilenvorschub) ;-)

Also: IdTCPClient1.Write('GET /rdr/pprdr.asp HTTP/1.0'#13#10#13#10);


:oops: Ist - das - pein - lich! :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Seite 1 von 2  1 2      

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