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


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.


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

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);

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


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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.