Pergunta

Na verdade, é chegado tão confuso que eu nem tenho certeza de onda é o culpado. Então, aqui está o php:

$creds = array(
    'pw' => "xxxx",
    'login' => "user"
    );

$login_url = "https://www.example.net/login-form"; //action value in real form.
$loginpage = curl_init();

curl_setopt($loginpage, CURLOPT_HEADER, 1);
curl_setopt($loginpage, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($loginpage, CURLOPT_URL, $login_url);
curl_setopt($loginpage, CURLOPT_POST, 1);
curl_setopt($loginpage, CURLOPT_POSTFIELDS, $creds);

$response = curl_exec($loginpage);
echo $response;

Recebo os cabeçalhos (que correspondem aos cabeçalhos de um pedido normal, bem sucedida), seguido pela página de login (eu estou supondo onda capturou esta devido a um redirecionamento), que tem um erro para o efeito de "tipo de contato Bad ".

Eu pensei que o problema era que o pedido tinha o conjunto host para o servidor requerente, não o servidor remoto, mas então eu notei (no Firebug), que o pedido é enviado como GET, não POST.

Se eu copiar formulário do site de login, tira-lo para baixo a apenas os elementos de formulário com valores, e colocar o URL completo para a ação, ele funciona muito grande. Então eu acho que isso não é um problema de segurança em que a solicitação de login tem que se originam no mesmo servidor, etc. (I até mesmo se livrar dos valores escondidos vazios e todos os JS que estabelecem alguns dos outros cookies).

Então, novamente, eu fico confuso muito rapidamente.

Todas as ideias por que ele está aparecendo como GET, ou por que ele não está funcionando, para que o assunto?

Foi útil?

Solução

Ao solucionar problemas de toda a classe de PHP-curl-relacionados problemas, você simplesmente tem que ligar CURLOPT_VERBOSE e dar CURLOPT_STDERR um identificador de arquivo.

tail -f seu arquivo, comparar os cabeçalhos e resposta aos que você vê no Firebug, eo problema deve ficar claro.

Outras dicas

O pedido é feito a partir do servidor, e não vai aparecer no Firebug. (Você provavelmente confundido com outro pedido pelo seu navegador). Use wireshark para descobrir o que realmente acontece. Você não está definindo CURLOPT_FOLLOWLOCATION; redirecionamentos não deve ser seguido.

Resumindo: Guess menos, postar mais. Link para um despejo pcap, e nós será capaz de dizer exatamente o que você está fazendo errado; ou postar a saída exata do script php, e nós poderia.

O código mostrado faz um formpost várias partes (uma vez que você passar uma matriz de hash para a opção POSTFIELDS), que provavelmente não é o que o espera servidor de destino.

tentar atirar em um print_r(curl_getinfo($loginpage)) no final, ver o que os dados do cabeçalho seja enviado de volta como.

Além disso, se a sua tentativa de falsificar que o seu login de seu site, o seu vai querer se certificar de seu envio a referência correta com o seu post, para que eles "pensa" que estavam no site quando você enviou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top