POST данные на страницу PHP из C # WinForm - PullRequest
4 голосов
/ 20 ноября 2008

У меня есть приложение winForms NET3.5SP1, и я хочу разместить данные на странице PHP.

Я также собираюсь передать его как JSON, но хотел, чтобы сначала работал прямой POST.

Вот код:

    Person p = new Person();
    p.firstName = "Bill";
    p.lastName = "Gates";
    p.email = "asdf@hotmail.com";
    p.deviceUUID = "abcdefghijklmnopqrstuvwxyz";

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    string s;
    s = serializer.Serialize(p);
    textBox3.Text = s;
    // s = "{\"firstName\":\"Bill\",\"lastName\":\"Gates\",\"email\":\"asdf@hotmail.com\",\"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) {}

Есть идеи? Я хочу, чтобы он возвращал значения, которые я только что передал, чтобы доказать, что могу получить доступ к данным со стороны сервера.

1 Ответ

8 голосов
/ 20 ноября 2008

Я считаю, что вам нужно правильно кодировать и отправлять фактическое содержание сообщения. похоже, вы просто сериализуете в 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']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...