REQUISIÇÃO HTTP POST

 Tópico anterior Próximo tópico Novo tópico

REQUISIÇÃO HTTP POST

C#

 Compartilhe  Compartilhe  Compartilhe
#485807 - 07/12/2018 09:23:12

ICHIHARA
SAO PAULO
Cadast. em:Dezembro/2003


Bom dia Pessoal,

Tenho que fazer um download de um arquivo de uma pagina de maneira automatica.
No caso ele tem um botão de download onde existe um link
analisando este link é a mesma URL do site e verificando pela ferramenta de desenvolvedor (F12)  ao acessar este link ele faz uma requisição http post.
diferente de ao acessar a pagina diretamente pela barra de endereço que é faz como Get.

Usei o exemplo abaixo para para fazer a requisicao http post:

// Construct HTTP request to get the file
HttpWebRequest httpRequest = (HttpWebRequest)
    WebRequest.Create("http://www.techcoil.com/poc/downloadPng.php");
httpRequest.Method = WebRequestMethods.Http.Post;

// Include post data in the HTTP request
string postData = "id=1";
httpRequest.ContentLength = postData.Length;
httpRequest.ContentType = "application/x-www-form-urlencoded";
// Write the post data to the HTTP request
StreamWriter requestWriter = new StreamWriter(
    httpRequest.GetRequestStream(),
    System.Text.Encoding.ASCII);
requestWriter.Write(postData);
requestWriter.Close();


// Construct HTTP request to get the file
HttpWebRequest httpRequest = (HttpWebRequest)
    WebRequest.Create("http://www.techcoil.com/poc/downloadPng.php");
httpRequest.Method = WebRequestMethods.Http.Post;

// Include post data in the HTTP request
string postData = "id=1";
httpRequest.ContentLength = postData.Length;
httpRequest.ContentType = "application/x-www-form-urlencoded";
// Write the post data to the HTTP request
StreamWriter requestWriter = new StreamWriter(
    httpRequest.GetRequestStream(),
    System.Text.Encoding.ASCII);
requestWriter.Write(postData);
requestWriter.Close();

// Define buffer and buffer size
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int bytesRead = 0;

// Read from response and write to file
FileStream fileStream = File.Create("techcoil-logo.png");
while ((bytesRead = httpResponseStream.Read(buffer, 0, bufferSize)) != 0)
{
    fileStream.Write(buffer, 0, bytesRead);
} // end while



Porém ele esta retornando uma pagina como se tivesse feito a requisição GET.

Acredito que seja o valor da varável
string postData = "id=1";
Pois não consegui identificar o que devo colocar nela.

Aguém pode me ajudar?

Att
Ichihara


Grato desde ja!
Cientista Ichihara

#485808 - 07/12/2018 10:37:32

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Eu usaria HttpClient para isso:

using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://www.techcoil.com");
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("id", "1") //aqui que vai o ID
            });
            var result = await client.PostAsync("poc/downloadPng.php", content);
            string resultContent = await result.Content.ReadAsStringAsync(); //aqui leio como string, mas é onde você vai colocar seu stream
            Console.WriteLine(resultContent);
        }


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#485824 - 07/12/2018 18:01:48

ICHIHARA
SAO PAULO
Cadast. em:Dezembro/2003


Tudo bem klerplunk!

O problema e que nao sei que dado preciso mandar no post... No caso eh uma pagina aspx pelo que vi nao eh jason eu um monte de caracteres que parece criptografado.... Ja viu isso?

Grato desde ja!
Cientista Ichihara

#485904 - 11/12/2018 12:25:05

ICHIHARA
SAO PAULO
Cadast. em:Dezembro/2003


Boa Tarde Pessoal,

Atualizando:

Consegui fazer a requisição via Postman.
Peguei os dados que identifiquei via ferramenta do desenvolvedor no Chrome.

Ajustei o código que o Kerplunk passou mas não esta funcionando o Post... ele retorna a pagina como se fosse o Get.
Aguem pode me ajudar no código.


A Url: "http//server012m1/Pess/Solic/Altera.aspx?Id=AS11234"   (intranet)

using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http//server012m1/Pess/Solic/Altera.aspx?Id=AS11234");
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("__ViewState", "asdocUIHsaiufhasprjfwqazi1sufbu2i3sdusxbfweivaueruhcbzjhdeibcwiubiwi1"),
new KeyValuePair<string, string>("_EventValidation", "asdklmerfioncweoiois2i3sdusxbfweivaueruhcbzjhdeibcwiubiwi1"),
new KeyValuePair<string, string>("anx", "1"),
new KeyValuePair<string, string>("xp", "12"),

   //Variaveis e valores adquidirdas via chorme (f12)
            });
            var result = await client.PostAsync(""http//server012m1/Pess/Solic/Altera.aspx?Id=AS11234"", content);
            string resultContent = await result.Content.ReadAsStringAsync(); //aqui leio como string, mas é onde você vai colocar seu stream
            Console.WriteLine(resultContent);
        }


Obrigado!




Grato desde ja!
Cientista Ichihara

#485905 - 11/12/2018 13:43:17

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Se o que você está tentando fazer é um post em um form WebForms, a coisa vai complicar bastante. Principalmente por causa de Session e ViewState.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#485906 - 11/12/2018 14:41:47

ICHIHARA
SAO PAULO
Cadast. em:Dezembro/2003


Boa Tarde KerPlunk

Utilizei, a Ferramenta Postman e consegui fazer o POST, então se o postman consegue será que não consigo fazer via C#?

Fiquei com duvidas de como a URL deve ser chamada, viso que no seu exemplo vc coloca um base e depois só um pedaço dela...
Sera que posso estar errando nisso?

Att
Ichihara

Grato desde ja!
Cientista Ichihara

#485910 - 11/12/2018 16:31:24

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Pode ser... deixe o BaseAddress em branco e use somente o endereço do post.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#485934 - 13/12/2018 15:31:39

ICHIHARA
SAO PAULO
Cadast. em:Dezembro/2003


Pessoal, mais alguma sugestão?

Grato desde ja!
Cientista Ichihara

#485935 - 13/12/2018 15:52:09

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Já experimentou copiar o código gerado do Postman? Ele gera código C#

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#485937 - 13/12/2018 16:44:54

ICHIHARA
SAO PAULO
Cadast. em:Dezembro/2003


Beleza Kerpluck,

É o proximo passo.
Ele usa o  RestSharp, estão para instalar na minha maquina o framework que suporta ele.

Vc sabe me dizer como eu sei se o conteudo(content) do post esta no Header ou no Body?

var result = await client.PostAsync(""http//server012m1/Pess/Solic/Altera.aspx?Id=AS11234"", content);

Pois no postman o conteudo esta no body.
Neste codigo acima não tenho certeza.

Abrs


Grato desde ja!
Cientista Ichihara

#485938 - 13/12/2018 17:21:37

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Estou supondo que você está usando a assinatura "PostAsync(String, HttpContent)" e que você esteja usando algo parecido com o que descreveu acima como content(no caso, FormUrlEncodedContent). Nesse caso, isso é o mesmo que um form mandaria, portanto estaria tudo no corpo do conteúdo.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário