Отправка данных POST - PullRequest
       4

Отправка данных POST

0 голосов
/ 13 августа 2011

Я пытаюсь соединиться с HTTP-сервером и отправить какую-то дату. Мой код выглядит как ->

public MainPage()
{
    InitializeComponent();
    WebClient client = new WebClient();
    Uri uri = new Uri("http://google.pl");
    string data = "Time = 12:00am temperature = 50";
    client.UploadStringCompleted += new UploadStringCompletedEventHandler    (UploadStringCallback2);
    client.UploadStringAsync(uri, data);
}

private static void UploadStringCallback2(Object sender, UploadStringCompletedEventArgs e)
{
    string reply = (string)e.Result;
    Console.WriteLine(reply);
}

Я получаю исключение "Удаленный сервер возвратил ошибку: NotFound." Мои окна отладки выглядят как

Первое случайное исключение типа «System.Net.WebException» произошло в System.Windows.dll Первое случайное исключение типа «System.Net.WebException» произошло в System.Windows.dll Первое случайное исключение типа «System.Net.WebException» произошло в System.dll

Пожалуйста, помогите! PS: Я установил 7.1 SDK Beta, но он должен работать на эмуляторе 7.0 (целевой версией Windows Phone является WP7).

EDIT:

Теперь код выглядит как

Uri uri = new Uri("MY SITE");
string data = "text=dupa";
//client.Encoding = System.Text.Encoding.UTF8;
var headers = new WebHeaderCollection();
headers[0] = " User-Agent: CERN-LineMode/2.15 libwww/2.17b3";
client.Headers = headers;
client.UploadStringCompleted += new UploadStringCompletedEventHandler(UploadStringCallback2);
client.UploadStringAsync(uri, data);

Соединяется с моим PHP-скриптом

<?php
    print_r($_POST);
    print_r($_SERVER[HTTP_USER_AGENT]);
?>

Но ответ похож на

Array
(
)
NativeHost

Заранее спасибо за помощь:)

EDIT: Хорошо, я понял это;) Все работает;)

Ответы [ 3 ]

1 голос
/ 13 августа 2011

Google не принимает запрос POST.Я не знаю о WP7, но если вы создадите простое консольное приложение с тем же кодом, вы получите исключение, что метод post не разрешен.

0 голосов
/ 08 декабря 2011

Класс WebClient использует метод GET для внутреннего использования, вам нужно использовать классы HttpWebRequest и HttpWebResponse. Вот небольшой фрагмент

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.foo.com");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        string postData = "parameter=value";
        // Getting the request stream.
        request.BeginGetRequestStream
            (result =>
                    {
                        // Sending the request.
                        using (var requestStream = request.EndGetRequestStream(result))
                        {
                            using (StreamWriter writer = new StreamWriter(requestStream))
                            {
                                writer.Write(postData);
                                writer.Flush();
                            }
                        }

                        // Getting the response.
                        request.BeginGetResponse(responseResult =>
                                                    {
                                                        var webResponse = request.EndGetResponse(responseResult);
                                                        using (var responseStream = webResponse.GetResponseStream() )
                                                        {
                                                            using (var streamReader = new StreamReader(responseStream))
                                                            {
                                                                var result = streamReader.ReadToEnd();

                                                            }
                                                        }                                                         
                                                    }, null);
                    }, null);
0 голосов
/ 07 сентября 2011

Попробуйте этот класс, который упрощает HTTP-вызовы: https://mytoolkit.codeplex.com/wikipage?title=Http (ссылка на мой проект codeplex)

Использование:

var request = new PostRequest("http://myurl.ch");
request.Data.Add("name", "myname");
request.Data.Add("email", "myemail);
Http.Post(request, OnSendCompleted, Deployment.Current.Dispatcher);

OnSendCompleted - это метод, который вызывается после завершения HTTP-вызова. С этим классом также легко отправлять файлы.

...