HttpWebRequest e formas de autenticação em C #
-
11-07-2019 - |
Pergunta
Eu sou um cara de sistemas e atualmente fazendo um projeto de desenvolvimento web tempo parcial por isso sou muito novo para isso. Eu estou tentando escrever um cliente http para www.portapower.com.
Ele vai para certos itens que são postadas no site e se eles correspondem a uma exigência particular que irá imprimir uma mensagem.
Enquanto a tentar aceder a esta página:
http://www.portapower.com /getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==
O site me redireciona para uma página padrão de registro:
http://www.portapower.com/defaregit.php
Aqui está um trecho do que eu codificado:
CookieContainer myContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.portapower.com/" + urlpart);
request.Credentials = new NetworkCredential("****", "******");
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();
Console.WriteLine(response.StatusCode);
Stream resStream = response.GetResponseStream();
Console.WriteLine(resStream.ToString());
Eu tenho o nome de usuário e senha e ele funciona muito bem quando usado a partir de um browser. Por favor me diga se isso de forma correta para acessar uma página autenticado.
Solução
Depende de como o site é a autenticação de usuários. Se eles estão usando autenticação básica ou a autenticação do Windows, então você pode definir o Credentials
propriedade do HttpWebRequest
classe para o / senha / informações de domínio nome de usuário e ele deve funcionar.
No entanto, parece que você tem que digitar o nome de usuário / senha no site, o que significa que você vai ter para acessar o site pela primeira vez. Olhando para a página principal, é isso que eu encontrar no elemento <form>
que alças sessão:
<form name="formlogin" method="post" action="./defalogin.php" >
<input name="emtext" type="text" id="emtext" size="12">
<input name="pstext" type="password" id="pstext" size="12">
<input type="submit" name="Submit" value="Logn in"
onClick="return logincheck()" >
</form>
Eu incluí apenas as partes relevantes.
Diante disso, você tem que ir para a página ./defalogin.php
primeiro com o os valores HttpWebRequest
e emtext
pstext
e POST. Além disso, certifique-se de definir o CookieContainer
propriedade a uma instância do CookieContainer
. Quando essa chamada aos retornos do POST, que é mais do que provavelmente vai ser preenchido com um cookie que você terá que enviar de volta para o site. Basta manter a configuração da propriedade CookieContainer
em todas as instâncias HttpWebRequest
posteriores a essa CookieContainer
para garantir que os cookies são repassados.
Então você teria que ir para a página indicada no link.
É preocupante também a função javascript logincheck
, mas olhando para as fontes de script, ele não faz nada digno de nota.
Outras dicas
As credenciais que você está passando é para autenticação do Windows. Você precisa enviar dados de postagem com dados que imita a apresentação de um formulário, em seguida, CapTrue o conjunto cookie de sessão nos ans de resposta usar esse cookie para futuras solicitações
Dê uma olhada nesta resposta que tem o código para fazer isso:
Você não pode fazê-lo desta maneira; as credenciais que você está passando podem ser usados ??com um esquema de autenticação básica (ou seja, onde, no navegador, você recebe uma caixa de diálogo nome de usuário / senha aparecendo.) Você vai ter que simular a entrada dos dados em que forma e pegar o cookie de login e usar isso.
A classe NetworkCredential é realmente para controlar as credenciais do Windows regulares (NTLM, Kerberos, etc).
Esse site é um site PHP em execução no Apache, então eu não acho que eles estão usando NTLM ou Kerberos.
O que você quer fazer é adicionar alguns campos de formulário no site, em seguida, manter o cookie você voltar. Certifique-se sobre os pedidos posteriores você empurrar a volta cookie para o site para que ele saiba que você já tenha identificado.