none
Chamar PHP com POST RRS feed

  • Pergunta

  • Boa noite pessoal,

    Tenho um PHP que recebe dois valores por POST, nesse PHP é feito uma consulta SQL e retorna os valores como JSON.

    A pergunta é, como chamar no meu projeto Windows Form  esse PHP passando os parâmetros e ao final trabalhar com esse JSON retornado do PHP?

    Desde já agradeço.


    sexta-feira, 9 de março de 2018 01:21

Respostas

  • Olá bom dia,

    Você pode utilizar o "HttpWebRequest", mas primeiro instale o pacote Newtonsoft.Json (https://www.newtonsoft.com/json) em seu projeto (via nuget), em seguida escreva:

           string url = "http:test.post";
                var webRequest = (HttpWebRequest)WebRequest.Create(url);
                webRequest.Method = "POST";
                webRequest.ContentType = "application/json";
                var jsonParametros = JsonConvert.SerializeObject(new { id = "25" });
                using (StreamWriter sw = new StreamWriter(webRequest.GetRequestStream())) sw.Write(jsonParametros);
                HttpWebResponse httpWebResponse = webRequest.GetResponse() as HttpWebResponse;
                using (Stream sr = httpWebResponse.GetResponseStream())
                {
                    if (httpWebResponse.StatusCode != HttpStatusCode.OK) throw new Exception(String.Format("Falha ao realizar operação. Received HTTP {0}", httpWebResponse.StatusCode));
                    else
                    {
                        using (var reader = new StreamReader(sr))
                        {
                            string json = reader.ReadToEnd();  //AQUI ESTÁ SUA STRING NO FORMATO "JSON"
                        }
                    }
                }

    Espero ter ajudado!

    Um abraço!





    sexta-feira, 9 de março de 2018 12:51
  • Olá amigo,

    Verifique então os dados de cabeçalho (Headers) da requisição HttpWebRequest estão corretos, pois neste exemplo atribui ao ContentType o padrão "application/json", verifique na lógica que está funcionando se não é diferente, e altere no request.

    Espero ter ajudado,

    Um abraço!

    sábado, 10 de março de 2018 02:20

Todas as Respostas

  • Olá bom dia,

    Você pode utilizar o "HttpWebRequest", mas primeiro instale o pacote Newtonsoft.Json (https://www.newtonsoft.com/json) em seu projeto (via nuget), em seguida escreva:

           string url = "http:test.post";
                var webRequest = (HttpWebRequest)WebRequest.Create(url);
                webRequest.Method = "POST";
                webRequest.ContentType = "application/json";
                var jsonParametros = JsonConvert.SerializeObject(new { id = "25" });
                using (StreamWriter sw = new StreamWriter(webRequest.GetRequestStream())) sw.Write(jsonParametros);
                HttpWebResponse httpWebResponse = webRequest.GetResponse() as HttpWebResponse;
                using (Stream sr = httpWebResponse.GetResponseStream())
                {
                    if (httpWebResponse.StatusCode != HttpStatusCode.OK) throw new Exception(String.Format("Falha ao realizar operação. Received HTTP {0}", httpWebResponse.StatusCode));
                    else
                    {
                        using (var reader = new StreamReader(sr))
                        {
                            string json = reader.ReadToEnd();  //AQUI ESTÁ SUA STRING NO FORMATO "JSON"
                        }
                    }
                }

    Espero ter ajudado!

    Um abraço!





    sexta-feira, 9 de março de 2018 12:51
  • Boa tarde Edson,

    Muito obrigado pelo retorno,

    Entendi o código, só fiquei com duvida no retorno ali da string json, isso vai retornar uma string, não seria um unico valor?, No meu PHP é retornado um JSON com varios valores, são 4 chaves com valores, nesse caso como eu conseguiria trabalhar com esses valores sendo que o retorno é uma string?

    sexta-feira, 9 de março de 2018 16:27
  • Olá,

    Vamos lá, tem como colocar o retorno aqui?

    Porque o correto é deserializar a string(json) para uma estrutura de objeto, e assim você irá conseguir trabalhar melhor.

    Obs. A string de retorno é unica sim, com toda a estrutura no formato json.

    No aguardo.

    Um abraço!


    • Editado Edson Loris sexta-feira, 9 de março de 2018 16:39
    sexta-feira, 9 de março de 2018 16:33
  • Na verdade a string está retornando vazia, estou tentando ver o porque, o código está assim

    string url = "http://tritetodevelopers.esy.es/login_user.php";
                var webRequest = (HttpWebRequest)WebRequest.Create(url);
                webRequest.Method = "POST";
                webRequest.ContentType = "application/json";
                var jsonParametros = JsonConvert.SerializeObject(new { email_user = "teste@teste.com", senha_user = "123456", token_user = "a"}); //apenas exemplos
                using (StreamWriter sw = new StreamWriter(webRequest.GetRequestStream())) sw.Write(jsonParametros);
                HttpWebResponse httpWebResponse = webRequest.GetResponse() as HttpWebResponse;
                using (Stream sr = httpWebResponse.GetResponseStream())
                {
                    if (httpWebResponse.StatusCode != HttpStatusCode.OK) throw new Exception(String.Format("Falha ao realizar operação. Received HTTP {0}", httpWebResponse.StatusCode));
                    else
                    {
                        using (var reader = new StreamReader(sr))
                        {
    
                            string json = reader.ReadToEnd(); //aqui o valor ja esta vazio, ai da erro nos procedimentos abaixo
                            var listaDinamica = JsonConvert.DeserializeObject<JToken>(json);
                            var lista = listaDinamica.Select(x => ((JProperty)x).Value.ToObject<Class1>()).ToList();
    
                            foreach (var item in lista)
                            {
                                Console.WriteLine(item.nome);
                            }
                        }
                    }
    
                }

    sexta-feira, 9 de março de 2018 16:51
  • Amigo,

    Fiz umas requisições de teste, sem retorno, verifique o serviço "php" se está de acordo, os parâmetros utilizados etc.

    Agraço! 

    sexta-feira, 9 de março de 2018 17:39
  • A senha informada ali não é a correta, colei como exemplo mesmo, mas com o PHP está correto, até porque utilizo o mesmo PHP em uma aplicação Android também, mas mesmo com a senha correta "123" não funciona essa requisição.

    Eu consegui aqui de outro jeito, mas queria ver desse jeito que mandou também, porque parece ser o mais correto

    .

    sexta-feira, 9 de março de 2018 18:13
  • Olá amigo,

    Verifique então os dados de cabeçalho (Headers) da requisição HttpWebRequest estão corretos, pois neste exemplo atribui ao ContentType o padrão "application/json", verifique na lógica que está funcionando se não é diferente, e altere no request.

    Espero ter ajudado,

    Um abraço!

    sábado, 10 de março de 2018 02:20