Mostrar cabeçalhos de solicitação do Curl POST? Existe uma maneira de fazer isso?

87

Estou construindo um aplicativo de automação da web Curl e estou tendo alguns problemas em não obter o resultado desejado da minha ação POST, estou tendo alguns problemas para descobrir como posso mostrar a solicitação POST completa que estou enviando (com cabeçalhos), tenho pesquisado sobre isso, mas tudo o que surge são os cabeçalhos de resposta, na verdade eu também quero esses, mas também a solicitação, que nenhuma das postagens que encontro no google parecem mencionar ..

Eu sei que posso exibir o resultado de uma solicitação curl usando algo assim (perdoe-me se minha sintaxe estiver errada, já desliguei minha máquina virtual com meu ide e código para me referir a

 $result = curl($curl_exect) ;

De qualquer forma, eu apreciaria muito qualquer conselho sobre como visualizar os cabeçalhos completos, obrigado

Rick
fonte

Respostas:

83

Você pode ver as informações sobre a transferência fazendo:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

antes do pedido, e

$information = curl_getinfo($curl_exect);

depois do pedido

Visualizar: http://www.php.net/manual/en/function.curl-getinfo.php

Você também pode usar o CURLOPT_HEADERem seucurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

Esses são apenas alguns métodos de uso dos cabeçalhos.

RobertPitt
fonte
4
Eu tentei isso, mas ele apenas produz um array do POST, então não está mostrando os cabeçalhos exatos, apenas o POST e não exatamente como o servidor receptor veria, então não é ideal para solução de problemas
Rick
5
A resposta não está completa. Antes que a solicitação seja executada, você devecurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch
1
isso mostra apenas o que o servidor enviou de volta. parece curl_setopt ($ ch, CURLOPT_VERBOSE, true); permitirá que você veja o que você envia para o servidor.
Steven Teo
169

Aqui está tudo que você precisa:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers
Joseph Lust
fonte
6
Como mostrar os dados POST também? Ou seja, aquele adicionado por curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu
@DanDascalescu Uma vez que você postou os dados, ao criar a solicitação Curl, não há necessidade de capturá-los de volta. Nota: os valores do formulário POST são enviados como "Dados do formulário", não como cabeçalhos, por isso que o texto acima não os mostra. Se você realmente precisa ver o que está passando, experimente o WireShark.
Joseph Lust de
10

Você pode salvar todos os cabeçalhos enviados por curl para um arquivo usando:

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);
Nassim Aouragh
fonte
6

Você pode fazer você mesmo solicitar cabeçalhos usando:

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
}

// close the socket connection:
fclose($fp);

Como escrito sobre como fazer o pedido

Liutas
fonte
Obrigado pela postagem, acho que não estou entendendo totalmente isso, pois é uma biblioteca diferente da curl, certo? Existe uma maneira de fazer isso apenas com o curl? Se não, vou tentar fazer dessa forma, só que não estou familiarizado com fputs
Rick
Esta é, na verdade, uma funcionalidade nativa do php
SSH Em
1
Esta é uma resposta legal porque expõe o tipo de solicitação bruta. Sempre fui ensinado a usar o cURL, que é uma biblioteca que às vezes precisa ser instalada e nem sempre está disponível.
Altimus Prime de
2

Tive exatamente o mesmo problema recentemente e instalei o Wireshark (é uma ferramenta de monitoramento de rede). Você pode ver tudo com isso, exceto o tráfego criptografado (HTTPS).

greg0ire
fonte
2
O WireShark roda em WinCap ou outro sistema de captura, você tem que ter um chipset baseado em Atheros para que funcione eu acho, por que você simplesmente não instala o Chrome e aperta Ctrl+Shift+Jentão clica no XHRbotão e no nome do arquivo e então vê cabeçalhos e dados.
RobertPitt
Eu tentei Wirehark, mas não parece pegar meu tráfego de saída do Curl POST
Rick
Presumi que você estava trabalhando em um servidor local, não é?
greg0ire
Robert, estou tentando fazer o que você disse no Chrome, mas não está fazendo nada quando pressiono Ctrl + Shift + 3, estou procurando informações sobre isso, mas não consigo encontrar algo relevante, qual recurso do Chrome isso está acessando? Obrigado
Rick
Ok, achei isso em relação à visualização dos cabeçalhos no Chrome: google.com/support/forum/p/Chrome/… Eu acredito que é Ctrl + Shift + i para acessar isso
Rick