Tipos de autenticação
O HTTP suporta autenticação nativa e é isso que você usou. A autenticação HTTP nativa é raramente usada, no entanto. O HTTP também permite que os dados do formulário sejam enviados para um servidor; A maioria dos sites, incluindo o que você está tentando usar, usa essa autenticação baseada em formulários em vez da autenticação HTTP porque é mais fácil de usar e personalizável.
Como funciona a autenticação de formulários
Quando um cliente HTTP solicita um recurso de um servidor HTTP, muitos dados são enviados no cabeçalho HTTP. A parte importante para a autenticação baseada em formulário são os cookies. Um cookie é apenas um nome para um conjunto de pares chave = valor. Vários cookies podem ser enviados em uma solicitação HTTP.
Quando uma solicitação de um recurso restrito é recebida, o servidor procurará um token de autenticação específico no cookie da sessão. Se não existir, significa que o cliente não efetuou login, portanto, ele retorna um formulário de login em vez do recurso solicitado. Se o token existir e for válido, significa que o cliente efetuou login, portanto, o servidor retorna o recurso que foi solicitado.
Então, como conseguimos esse token de autenticação especial e como o enviamos? Nós o recebemos enviando o formulário de login com dados válidos. Depois que o servidor autentica o cliente, ele envia de volta um cookie no cabeçalho HTTP. Precisamos salvar esse cookie e passá-lo com todas as solicitações futuras.
O tachas de latão
Coleta de informações
Veja a fonte da página de login. Você já fez o download usando wget, apenas abra isso em um editor de texto. Procure <form...>
na origem. Em geral, pode haver vários, e você pode ter que descobrir qual deles é para enviar os dados de login. No que você está trabalhando agora, há apenas um formulário. Em seguida, procure todas as tags <input...>
. Estes têm dados que serão enviados como parte dos dados do formulário. De particular interesse é a parte name=...
. Esta é a parte chave do par chave = valor, e o que quer que você preencha é a parte valor .
A página com a qual você está trabalhando tem os seguintes campos Login
, Password
, AdminSiteaccessURI
, LoginButton
e RedirectURI
. O </form>
é o final do formulário - você não precisa procurar mais. Precisamos enviar todas essas chaves com os valores apropriados. Alguns dos valores são preenchidos por você - o que inclui Login
e Password
, outros, você pode pegar o valor que já está presente no campo. Se você observar o RedirectURI
, verá que o atributo value=
do servidor preencheu o URI do recurso real que você estava solicitando em primeiro lugar.
Existe mais uma informação importante: onde e como submetemos os dados? Isso pode ser encontrado na tag <form...>
. Terá um método e uma ação. A ação não tem o URL completo; tem um URL relativo à base, mas você precisará do URL completo, então adicione a base ao URL relativo. A ação é o URL para enviar e a ação informa se é uma solicitação POST ou GET. A página com a qual você está trabalhando precisa dos dados enviados pelo método POST.
Enviando os dados de login
Agora que sabemos o que vamos enviar, precisamos fazer isso. Podemos usar wget
para isso. Se você olhar para a página man, você encontrará uma opção --post-data=string
; mostra como formatá-lo: key1=value1&key2=value2...
. É simplesmente key = value para cada par, concatenado por um &
. Esta não é a única opção que precisamos.
Lembre-se do token de autenticação? O servidor irá enviá-lo de volta como parte da resposta, e precisamos salvá-lo. Olhando através da página man novamente para "cookie", você verá algumas opções importantes. --save-cookies file
e --keep-session-cookies
.
Construa sua linha de comando com essas opções e execute-a, tendo em mente que o URL para o qual você está enviando não é o recurso que você estava tentando obter originalmente - você precisa enviar para o URL apontado pelo <form action=...>
atributo. Você deve acabar com seus cookies de sessão em um arquivo e, possivelmente (se o wget seguir com sucesso os redirecionamentos HTTP), o arquivo PDF como a saída. Se não tiver recebido o arquivo PDF, você enviará outra solicitação (desta vez sem --post-data
), mas, desta vez, inclua os cookies salvos antes de usar o '--load-cookies file'.
Isso deve ser feito!