Laden...

Mit c# von php-script array empfangen

Erstellt von Massaka vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.629 Views
M
Massaka Themenstarter:in
67 Beiträge seit 2004
vor 19 Jahren
Mit c# von php-script array empfangen

Hallo zusammen,

Ich habe ein kleines Problemchen. Ich versuche Benutzername und Passwort an ein PHP Skript zu Übergeben, welches mir dann mittels MySQL Abfrage ein Array von Benutzerdaten zurück liefert. Das ganze wird leider nötig da der MySQL Server nur von Lokalhost aus angesprochen werden kann.

Die Übergabe von Username & passwort ist nicht das Problem, das mache ich mit webrequest, aber ich weiß nicht, wie ich an die vom PHP-Script zurückgegebenen Daten komme.

Hat das jemand schon einmal probiert und könnte mir einen "Anstoss" geben ?

Reden führt zu unklaren, undeutlichen Dingen. 'George W. Bush'

D
279 Beiträge seit 2004
vor 19 Jahren
M
Massaka Themenstarter:in
67 Beiträge seit 2004
vor 19 Jahren
Mit c# von php-script array empfangen

Wow, flotte Antwort 😉

Das hatte ich allerdings schon gelesen - das php-Script ist acuh nicht das Problem, sondern wie ich an das Array (oder irgendwas anderes) komme, was das php-Script zurückliefert.

Reden führt zu unklaren, undeutlichen Dingen. 'George W. Bush'

D
279 Beiträge seit 2004
vor 19 Jahren

Wo wird das PHP-Skript denn ausgeführt und wo deine C# Anwendung?
Warum greifst du nicht mit C# auf die MySQL Datenbank zu?

M
Massaka Themenstarter:in
67 Beiträge seit 2004
vor 19 Jahren
mit php daten an c# zurückgeben

Also das php-Script liegt auf dem Server (wo auch die DB läuft, die nur über localhost angesprochen werden kann), das c#-Proggie soll irgendwo auf nem Client laufen, wo eine Internetverbindung besteht.

mit c# kann ich nicht direkt auf die DB, weil diese nur localhost-zugriffe zuläßt.

Großes Sorry, hatte im Beitrag 'klick mich' 😉 das letzte Post übersehen. Das aber auch inzwischen schon eingebaut, nur bekomme ich leider immer noch nichts...

Reden führt zu unklaren, undeutlichen Dingen. 'George W. Bush'

D
279 Beiträge seit 2004
vor 19 Jahren

Ich muss leider zugeben, dass ich mich mit PHP kaum auskenne (da bin ich wohl einer der wenigen:)).

Was mir nun noch spontan einfallen würde: Du könntest doch die Ergebnisse aus der Datenbank als Datei auf dem Webserver speichern und dann mit der C#-Anwendung weiterverarbeiten.

Aber normalerweise sollte es so gehen wie Franknstein im anderen Thread schon beschrieben hat. Zeig doch mal deinen C# Code..

M
Massaka Themenstarter:in
67 Beiträge seit 2004
vor 19 Jahren

string url = "http://url/test.php?UserName=test&UserPass=test";
Uri myUri =new Uri(url);
WebRequest myWebRequest= WebRequest.Create(myUri);
WebResponse myWebResponse= myWebRequest.GetResponse();

Über das Debugging versuche ich nun zu erkennen ob WebResponse mir etwas zurück liefert. Ansich wird ein String mit dem Inhalt "Test" geliefert.

der PHP Code sieht so aus.


if($_GET)
{
  $aUser = getData($_GET['UserName'],$_GET['UserPass']);
  if($aUser)
  {
     $name = $aUser['user_name'];
     $data = $aUser['user_domain'];
     $pass = $aUser['user_pass'];
     if(getenv("HTTP_X_FORWARDED_FOR"))
       $ip = getenv("HTTP_X_FORWARDED_FOR");
     else
       $ip = getenv("REMOTE_ADDR");
     $fp = fsockopen($ip, 80, $errno, $errstr);
     if (!$fp)
     {
        die("Fehler beim Herstellen der Socketconnection");
     }
     else
     {
        fwrite($fp, $data);
        fclose($fp);
     }
   }
}


In $data steht "Test" drin.

Reden führt zu unklaren, undeutlichen Dingen. 'George W. Bush'

D
279 Beiträge seit 2004
vor 19 Jahren

Das Skript schickt die die Daten über eine Tcp-Verbindung zu.
Du musst bei deinem Client dann auch einen Tcp-Listener (System.Net.Sockets) auf den angebenen Port (1111) öffnen, der auf die Daten wartet.

F
124 Beiträge seit 2004
vor 19 Jahren

warum so umständlich? gib doch im php-skript einfach die daten mit echo/print aus. das is dann wie eine normale internetseite. die ist doch dann sicherlich in deiner webresponse enthalten und du kannst die irgendwie parsen dann ?!

php-skripte haben normalerweise einen timeout von 30 sekunden, also könnte das mit deiner verbindung auch schnell schiefgehen.

C
1.215 Beiträge seit 2004
vor 19 Jahren

so würde ichs auch machen.
mit php die daten nicht auf http-basis zu senden, ist in diesem fall, denke ich, absolut unnötig.
weil du dann, wie oben bereits gesagt wurde, auch nen server schreiben musst, der mit deiner anderen c#-anwendung interagiert.
gib einfach nur einen durch kommas getrennten string aus in deinem php-script - den erhälst du dann als HttpWebResponse-objekt...

grtz
chief

D
279 Beiträge seit 2004
vor 19 Jahren

Je nachdem was und wie viele Daten in derm Array vorhanden sind, wäre es vielleicht doch besser diese zu serialisieren und über einen tcp channel zu schicken und auf der anderen seite wieder zu deserialisieren.

Wenn es sich allerdings nur um eine oder einige Zeichenketten handelt ist das natürlich unnötig.

M
Massaka Themenstarter:in
67 Beiträge seit 2004
vor 19 Jahren

Ich habe es nun endlich geschafft 🙂
Das PHP Skript gibt mir nun ein Array in Form eines Strings wieder das ich auf Trennzeichen untersuchen werde.
Der Code sieht wie folgt aus:


string user_name = Convert.ToString(textBox1.Text);
string passwort = Convert.ToString(textBox2.Text);
string url = "http://test.dyndns.org/test.php";
HttpWebRequest myHttp = (HttpWebRequest)WebRequest.Create(url);
myHttp.ContentType="application/x-www-form-urlencoded";
string lcPostData = "UserName=" + user_name + "&UserPass=" + passwort;
myHttp.Method="POST";
byte [] lbPostBuffer  = System.Text.Encoding.GetEncoding(1252).GetBytes(lcPostData);
myHttp.ContentLength = lbPostBuffer.Length;
Stream loPostData = myHttp.GetRequestStream();
loPostData.Write(lbPostBuffer,0,lbPostBuffer.Length);
loPostData.Close();
			
HttpWebResponse myWebResponse = (HttpWebResponse) myHttp.GetResponse();
Encoding enc = System.Text.Encoding.GetEncoding(1252);
StreamReader myResponseStream = new StreamReader(myWebResponse.GetResponseStream(),enc);

string lcHtml = myResponseStream.ReadToEnd();
myWebResponse.Close();
myResponseStream.Close();

Vielen Dank für eure schnellen Antworten die mir sehr geholfen haben 🙂

Reden führt zu unklaren, undeutlichen Dingen. 'George W. Bush'