Entwickler-Ecke

ASP.NET und Web - c# daten an php übergeben!


manser - Sa 27.10.07 19:35
Titel: c# daten an php übergeben!
Hi,



wie kann ich daten per c# an ein PHP Script übergeben?
Habe mir die WebClient Klasse angeschaut, doch leider nicht wirklich nen Beispiel gefunden.

Kann mir jemand von euch helfen?


Moderiert von user profile iconChristian S.: Topic aus Internet / Netzwerk verschoben am Sa 27.10.2007 um 19:36


manser - So 28.10.07 21:25

weiß hier niemand bescheid?


Christian S. - So 28.10.07 21:27

Wahrscheinlich kann nur niemand mit den wenigen Informationen, die Du lieferst, etwas anfangen. Was willst Du übertragen? Textdaten, Bilder, Filme, ... Was erwartet das PHP-Skript? GET, POST, etc.?


manser - Mo 29.10.07 19:09

erst einmal soll nur text übertragen werden...per Post an ein PHP Script welches auf einem externen Server liegt.

Gruß

Manser


Christian S. - Mo 29.10.07 19:16

Hallo!

Dann sollte die HttpWebRequest-Klasse für Dich gut geeignet sein. Erzeugen z.B mit:

C#-Quelltext
1:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"http://www.einskript.de");                    


Dann kannst noch die Method-Eigenschaft auf "POST" setzen.

Wenn Du dann etwas senden willst, kannst Du das über den RequestStream (Stichwort: request.GetRequestStream();) machen.

Die Antwort erhälst Du dann mittels request.GetResponse();

Mit den Stichworten und der Doku (die auch ein paar Beispiele enthält) solltest Du erstmal voran kommen. Wenn's nicht weiter geht, einfach nochmal fragen ;-)

Grüße
Christian


manser - Mo 29.10.07 22:11

ok, vielen dank für deine mühe...


jetzt werde ich mich erst einmal selbst ein bischen an dem code probieren.


gruß

manser


manser - Di 30.10.07 22:34

So,

hab jetzt folgenden Code;


C#-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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace meinedomain.org
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"http://www.meinedomain.org/test.php");
            request.Method = "POST";

            string postData = "username=" + textBox1.Text;
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] byte1 = encoding.GetBytes(postData);

            // Set the content type of the data being posted.
            request.ContentType = "application/x-www-form-urlencoded";

            // Set the content length of the string being posted.
            request.ContentLength = byte1.Length;

            Stream newStream = request.GetRequestStream();

            newStream.Write(byte1, 0, byte1.Length);

            WebResponse myWebResponse = request.GetResponse();
            //textBox1.Text = myWebResponse.ToString;

            // Close the Stream object.
            newStream.Close();

        }
    }
}


in dem Script steht folgendes:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
<?php
if ($_POST[username] == 'hund') 
  {
    $file = "counter.txt"; // Dateizuweisung
    $ftp = @fopen($file,"r+"); // Öffnet die Datei
    $count = (int)fgets($ftp,10); // Holt die ersten 10 Zeichen
    $count++; // Addiert eine 1
    rewind($ftp); // Setzt Zeige auf 0. Position
    fwrite($ftp,$count); // Schreibt
    fclose($ftp); // Schließt die Datei
    include($file); // Zeigt sich selbst an
  }
?>


aber es tut sich nicht wirklich was wenn ich hund übergebe...

1. Ich weiß nicht ob wirklich was ankommt.
2. Ich weiß nicht wie ich die Antwort des Scripts als Text anzeigen lassen kann.

Gruß

Manser


Kha - Di 30.10.07 22:49

Denke noch einmal scharf über die Reihenfolge von GetResponse und Close nach - erst schickst du die Abfrage ab, dann beendest du ihre Dateninitialisierung ;) ?


manser - Mi 31.10.07 10:02

verstehe ich nicht ganz, wie müsste es denn richtig sein?

----

das senden an das Script funktioniert jetzt teilweise...(manchmal stürzt das Programm auch ab), doch wie bekomm ich jetzt die Antwort des PHP Scriptes...zurück als String?

also wenn im Script unten noch echo('ok'); stehen würde soll mein Programm das ja auch wissen.


Christian S. - Mi 31.10.07 10:37

user profile iconmanser hat folgendes geschrieben:
verstehe ich nicht ganz, wie müsste es denn richtig sein?
Wenn Khabarakh so fragt, könnte man fast vermuten, dass sie im Moment falsch ist. Und bei zwei Zeilen sollte es möglich sein, dass Du selber rausfindest, was die richtige Reihenfolge ist. Gibt ja nicht allzu viele Möglichkeiten :roll:

user profile iconmanser hat folgendes geschrieben:
das senden an das Script funktioniert jetzt teilweise...(manchmal stürzt das Programm auch ab), doch wie bekomm ich jetzt die Antwort des PHP Scriptes...zurück als String?
Was denkst Du, macht die Methode GetResponse?

Ich möchte Dich wirklich bitten, ein bisschen mehr Eigeninitiative zu zeigen. Offensichtlich hast Du die GetResponse-Methode einfach per Copy & Paste übernommen, ohne Dich damit zu beschäftigen, was da passiert.


manser - Do 01.11.07 11:26

doch hab mich damit beschäftigt...es funktioniert ja auch soweit...

nur wie kann ich jetzt die Ausgabe des Scripts an mein Programm zurückgeben?


Christian S. - Do 01.11.07 12:15

Du könntest einfach mal überlegen, warum ich das Wort "Response" fett gemacht habe in meinem vorigen Posting. Und Dich dann mal mit der Klasse WebResponse beschäftigen.


manser - Do 01.11.07 22:19

hab ich, komm nicht weiter und jetzt?


Christian S. - Do 01.11.07 23:47

Und jetzt: Was hast Du versucht, wo hakt es? Was sind Deine Fragen?


manser - Fr 02.11.07 23:50

ich verstehe es nicht und möchte jetzt wissen wie es richtig geht...


Christian S. - Sa 03.11.07 00:12

*seufz*

Du musst nur die Doku zur WebResponse-Klasse aufrufen, bemerken dass es die Methode "GetResponseStream" gibt (wenn man "GetRequestStream" kennt, sticht das sofort ins Auge) und Dir das Beispiel in der Doku ansehen.


manser - Sa 03.11.07 10:38

hab ich, mir stach nichts ins Auge und verstehen tue ich es auch noch nicht...


Christian S. - Sa 03.11.07 12:37

Wo hakt es denn? Was hast Du versucht? Was verstehst Du nicht? An welcher Stelle konnte Dir die Doku (die ja sogar Quellcode-Beispiele enthält!) nicht helfen?


manser - So 04.11.07 18:42

wo es hakt habe ich doch schon geschrieben...


dass ich die doku nicht verstehe habe ich auch schon geschrieben...den quellcode haabe ich ja genutzt...also was willst du noch?


ich bracuehe einfach Hilfe!


Christian S. - So 04.11.07 18:51

Was verstehst Du in der Doku nicht? Welchen Teil des dortigen Quellcodes?

Wo ist der Quellcode, in dem Du mit GetResponseStream arbeitest und der nicht funktioniert?

Zeig mir einfach, dass Du Dich auch selber bemühst. Ich werde Dir Dein Programm nicht schreiben, ich werde Dir helfen es selber zu tun.


manser - So 04.11.07 21:12

habs jetzt, woanders bekommt man wenigstens noch Hilfe:


C#-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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
    StringBuilder strData = new StringBuilder();
        strData.Append("username=hund");
        //strData.Append("&AdminPassword=mypassword");
        //strData.Append("&Login=Log on");

        
        byte[] dataToPost = new ASCIIEncoding().GetBytes(strData.ToString());

        // create httppost
        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://meinedomain.org/test.php");
       
        //request als POST
        myRequest.Method = "POST";

        myRequest.ContentType="application/x-www-form-urlencoded";

        //Länge
        myRequest.ContentLength = dataToPost.Length;

        
        Stream myStream = myRequest.GetRequestStream();

        
        myStream.Write(dataToPost,0,dataToPost.Length);
        myStream.Close();

        //reponse 
        WebResponse myResponse = myRequest.GetResponse();
 
        
        Stream responseStream = myResponse.GetResponseStream();

        //type streamreader                 
        StreamReader streamReader = new StreamReader(responseStream);

        
        string result = streamReader.ReadToEnd();
        this.Text = result;
        streamReader.Close();
        responseStream.Close();
        myResponse.Close();
        myStream.Close();


Christian S. - So 04.11.07 21:24

user profile iconmanser hat folgendes geschrieben:
habs jetzt, woanders bekommt man wenigstens noch Hilfe:
Einfach mal aus der Doku zu GetResponseStream kopiert:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  // Send the 'WebRequest' and wait for response.
  WebResponse myWebResponse = myWebRequest.GetResponse(); 

  // Obtain a 'Stream' object associated with the response object.
  Stream ReceiveStream = myWebResponse.GetResponseStream();
            
  Encoding encode = System.Text.Encoding.GetEncoding("utf-8");

        // Pipe the stream to a higher level stream reader with the required encoding format. 
   StreamReader readStream = new StreamReader( ReceiveStream, encode );


Entschuldige, dass ich so dreist war, von Dir zu erwarten, dass Du selber liest :roll: