2008-11-20 11 views
4

我有一個winForms NET3.5SP1應用程序,並希望POST數據到PHP頁面。將數據POST到C#的WinForm PHP頁面

我也將通過它作爲JSON,但希望得到直POST後工作第一。

下面是代碼:

Person p = new Person(); 
    p.firstName = "Bill"; 
    p.lastName = "Gates"; 
    p.email = "[email protected]"; 
    p.deviceUUID = "abcdefghijklmnopqrstuvwxyz"; 

    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    string s; 
    s = serializer.Serialize(p); 
    textBox3.Text = s; 
    // s = "{\"firstName\":\"Bill\",\"lastName\":\"Gates\",\"email\":\"[email protected]\",\"deviceUUID\":\"abcdefghijklmnopqrstuvwxyz\"}" 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.davemateer.com/ig/genius/newuser.php"); 
    //WebRequest request = WebRequest.Create("http://www.davemateer.com/ig/genius/newuser.php"); 
    request.Method = "POST"; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    //byte[] byteArray = Encoding.UTF8.GetBytes(s); 
    byte[] byteArray = Encoding.ASCII.GetBytes(s); 
    request.ContentLength = byteArray.Length; 
    Stream dataStream = request.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 
    dataStream.Close(); 

    WebResponse response = request.GetResponse(); 
    textBox4.Text = (((HttpWebResponse)response).StatusDescription); 
    dataStream = response.GetResponseStream(); 

    StreamReader reader = new StreamReader(dataStream); 
    string responseFromServer = reader.ReadToEnd(); 
    textBox4.Text += responseFromServer; 

    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 

而且PHP5.2代碼:

<?php 
echo "hello world"; 
var_dump($_POST); 
?> 

這個返回:

array(0) {} 

任何想法?我希望它返回我剛剛通過它的值,以證明我可以從服務器端訪問數據。

回答

8

我相信你需要正確編碼併發送實際的帖子內容。它看起來像你只是序列化爲JSON,其中PHP不知道如何處理(即,它不會將其設置爲$_POST值)

string postData = "firstName=" + HttpUtility.UrlEncode(p.firstName) + 
        "&lastName=" + HttpUtility.UrlEncode(p.lastName) +      
        "&email=" + HttpUtility.UrlEncode(p.email) + 
        "&deviceUUID=" + HttpUtility.UrlEncode(p.deviceUUID); 
byte[] byteArray = Encoding.ASCII.GetBytes(postData); 
// etc... 

做到這一點應該得到你的$_POST變量在PHP集。以後當你切換到JSON,你可以這樣做:

string postData = "json=" + HttpUtility.UrlEncode(serializer.Serialize(p)); 

和PHP搶:

$json_array = json_decode($_POST['json']); 
+0

感謝很多人。即將問這個確切的問題! – Irwin 2009-04-27 11:47:01