Eu acho que curl -vé o mais fácil. Ele cuspirá os cabeçalhos da solicitação (linhas prefixadas com '>') sem precisar gravar em um arquivo:
$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/
* About to connect() to stackoverflow.com port 80 (#0)
* Trying 69.59.196.211... connected
* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS
> Host: stackoverflow.com
> Accept: */*
> Testing: Test header so you see this works
>
< HTTP/1.0 200 OK
...
onda -v -D - stackoverflow.com -o / dev / null (para não exibir o conteúdo do site inteiro, apenas cabeçalhos)
omnomnom
20
curl -Ivs http://example.com > /dev/null: -Ipara uma HEADsolicitação, -vmostrar cabeçalhos enviados, -socultar a barra de progresso, > /dev/nullmostrar apenas a saída -v, evitando duplicação.
aqui
O @PiotrekDe -D -foi legal, mas não foi útil para mim, pois simplesmente duplicava os cabeçalhos que -vjá eram exibidos. Se você deseja que eles não sejam fixos para o consumo automatizado de máquinas, talvez seja melhor nesse caso, mas eu só queria vislumbrar o problema em mais detalhes.
Pysis
1
Existem dois recursos muito úteis do sinalizador "detalhado": primeiro, ele também imprime o processo de handshake TLS ao acessar o site por HTTPS, como curl -v https://www.example.com; segundo, também imprime a CONNECTsolicitação se você estiver visitando o site por meio de proxy HTTP , como curl --proxy my-proxy:8080 http://www.example.com. Acredito que ajudaria mais usuários se alguns exemplos desses dois recursos forem mencionados nesta resposta.
Franklin Yu
1
TL; DR: não use-I No mundo moderno, quando as pessoas perguntam sobre a exibição de cabeçalhos, provavelmente estão falando sobre APIs. E se você usar a -Imentalidade "Eu uso para ver os cabeçalhos com meu servidor da web Apache", você perderá muito tempo desenvolvendo um HEADmétodo quando provavelmente pretende usá-lo GET. Pare de dizer para as pessoas usarem -I. Se eles querem HEAD, o uso -X HEAD(TWSS)
de Bruno Bronosky
141
A pergunta não especificou se o comando da linha de comandos com o nome curlpretendia ou se toda a biblioteca cURL.
O código PHP a seguir, usando a biblioteca cURL, usa o primeiro parâmetro como método HTTP (por exemplo, "GET", "POST", "OPTIONS") e o segundo parâmetro como URL.
Essa é a melhor resposta, porque o arquivo usado neste método contém tudo em curl_getinfo () mencionado abaixo, além de mais detalhes sobre a solicitação e a resposta.
Mike_K
3
Você pode usar CURLOPT_WRITEHEADER para as informações do cabeçalho e CURLOPT_FILE para toda a transferência
sturrockad
1
Lembre-se de que, se a conexão for recusada, os arquivos que foram especificados CURLOPT_WRITEHEADER e CURLOPT_FILEestão vazios.
eithed
34
Quem disse alguma coisa sobre o usophp?
Eddie B
1
Votou sua resposta porque, enquanto a pergunta não estava relacionada ao php, sua resposta com base em php me indicou a direção certa para resolver meu próprio problema com o envio de um token de portador. Obrigado. Eu declarei minha razão aqui apenas na tentativa vã de fazer com que essa pergunta apareça nas pesquisas futuras do Google por desenvolvedores php com um problema semelhante.
26419 Chris
49
A única maneira de conseguir ver meus cabeçalhos de saída (enrolar com php) era usando as seguintes opções:
produz um arquivo curl.traceque inicia da seguinte maneira:
== Info: About to connect() to www.google.com port 80 (#0)
== Info: Trying 209.85.229.104... == Info: connected
== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)
=> Send header, 145 bytes (0x91)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
0050: OpenSSL/0.9.7l zlib/1.2.3
006c: Host: www.google.com
0082: Accept: */*
008f:
Também obteve uma resposta (uma resposta 302, para ser precisa, mas irrelevante) que foi registrada.
Se você deseja salvar apenas os cabeçalhos de resposta , use a --dump-headeropção:
curl -D file url
curl --dump-header file url
Se você precisar de mais informações sobre as opções disponíveis, use curl --help | less(ele produz algumas centenas de linhas de saída, mas menciona muitas opções). Ou encontre a página do manual onde há mais explicações sobre o significado das opções.
Isso é muito detalhado, mas certamente mostra tudo o que você precisa saber.
tripleee
27
Tentei as respostas aqui e descobri que a mais útil e mais fácil ainda não está listada como resposta, mas é:
curl -v https://example.com/path
Isso imprime os cabeçalhos PEDIDO , bem como os cabeçalhos RESPONSE, além de outros úteis, como o certificado SSL, e se uma conexão TCP existente foi reutilizada. o -vsinalizador pode ser combinado com outros sinalizadores, é claro, como seguir redirecionamentos e solicitar autenticação HTTP:
Um comando como o abaixo mostrará três seções: cabeçalhos de solicitação, cabeçalhos de resposta e dados (separados por CRLF). Evita informações técnicas e ruídos sintáticos adicionados pelo curl.
Eu sei que é um pouco tarde, mas meu método preferido para fazer isso é netcat, pois você recebe exatamente o que foi curlenviado; isso pode diferir das opções --traceou --trace-asciique não mostram caracteres não-ASCII corretamente (eles apenas aparecem como pontos ou precisam ser decodificados).
Você pode fazer isso com muita facilidade abrindo duas janelas de terminal, no primeiro tipo:
nc -l localhost 12345
Isso abre um processo de escuta na porta 12345 da sua máquina local.
Na segunda janela do terminal, digite seu comando curl, por exemplo:
curl --form 'foo=bar' localhost:12345
Na primeira janela do terminal, você verá exatamente qual onda foi enviada na solicitação.
Agora, é claro nc, não enviará nada em resposta (a menos que você o digite), portanto, você precisará interromper o comando curl (control-c) e repetir o processo para cada teste.
No entanto, essa é uma opção útil para simplesmente depurar sua solicitação, pois você não envolve uma viagem de ida e volta a lugar nenhum ou produz solicitações falsas e iterativas em algum lugar até que você acerte; Quando estiver satisfeito com o comando, basta redirecioná-lo para um URL válido e pronto.
Você também pode fazer o mesmo em qualquer biblioteca cURL; basta editar sua solicitação para apontar para o ncouvinte local até que você esteja feliz com isso.
// Parse response and read cookies
preg_match_all('/^Set-Cookie: (.*?)=(.*?);/m', $response, $matches);
// Build an array with cookies
foreach( $matches[1] as $index => $cookie )
$cookies[$cookie] = $matches[2][$index];
return $cookies;
} // end http_login_client
Obrigado, embora não esteja exatamente respondendo à pergunta, é exatamente isso que eu precisava. O dispositivo A faz uma solicitação, o dispositivo B verifica se uma solicitação foi feita.
Respostas:
Eu acho que
curl -v
é o mais fácil. Ele cuspirá os cabeçalhos da solicitação (linhas prefixadas com '>') sem precisar gravar em um arquivo:fonte
curl -Ivs http://example.com > /dev/null
:-I
para umaHEAD
solicitação,-v
mostrar cabeçalhos enviados,-s
ocultar a barra de progresso,> /dev/null
mostrar apenas a saída -v, evitando duplicação.-D -
foi legal, mas não foi útil para mim, pois simplesmente duplicava os cabeçalhos que-v
já eram exibidos. Se você deseja que eles não sejam fixos para o consumo automatizado de máquinas, talvez seja melhor nesse caso, mas eu só queria vislumbrar o problema em mais detalhes.curl -v https://www.example.com
; segundo, também imprime aCONNECT
solicitação se você estiver visitando o site por meio de proxy HTTP , comocurl --proxy my-proxy:8080 http://www.example.com
. Acredito que ajudaria mais usuários se alguns exemplos desses dois recursos forem mencionados nesta resposta.-I
No mundo moderno, quando as pessoas perguntam sobre a exibição de cabeçalhos, provavelmente estão falando sobre APIs. E se você usar a-I
mentalidade "Eu uso para ver os cabeçalhos com meu servidor da web Apache", você perderá muito tempo desenvolvendo umHEAD
método quando provavelmente pretende usá-loGET
. Pare de dizer para as pessoas usarem-I
. Se eles queremHEAD
, o uso-X HEAD
(TWSS)A pergunta não especificou se o comando da linha de comandos com o nome
curl
pretendia ou se toda a biblioteca cURL.O código PHP a seguir, usando a biblioteca cURL, usa o primeiro parâmetro como método HTTP (por exemplo, "GET", "POST", "OPTIONS") e o segundo parâmetro como URL.
Exemplo de uso:
Observe que os resultados são quase idênticos aos da seguinte linha de comando
fonte
CURLOPT_WRITEHEADER
eCURLOPT_FILE
estão vazios.php?
A única maneira de conseguir ver meus cabeçalhos de saída (enrolar com php) era usando as seguintes opções:
Obtendo suas informações de depuração:
fonte
var_dump $data
retornará os cabeçalhos de resposta, bem como o corpo da resposta. O var_dumpcurl_getinfo($ch)
fornecerá os cabeçalhos da solicitação.CURLOPT_HEADER
é o cabeçalho da resposta -CURLINFO_HEADER_OUT
é o cabeçalho da solicitação. Isto é o que o OP está pedindo :)A
--trace-ascii
opção de enrolar mostrará os cabeçalhos da solicitação, bem como os cabeçalhos de resposta e o corpo da resposta.Por exemplo, o comando
produz um arquivo
curl.trace
que inicia da seguinte maneira:Também obteve uma resposta (uma resposta 302, para ser precisa, mas irrelevante) que foi registrada.
Se você deseja salvar apenas os cabeçalhos de resposta , use a
--dump-header
opção:Se você precisar de mais informações sobre as opções disponíveis, use
curl --help | less
(ele produz algumas centenas de linhas de saída, mas menciona muitas opções). Ou encontre a página do manual onde há mais explicações sobre o significado das opções.fonte
curl --trace-ascii {filename} ou use um único traço em vez do nome do arquivo para enviá-lo ao stdout:
CURLOPT_DEBUGFUNCTION se você estiver usando libcurl
Isso mostra tudo o que o curl envia e recebe, com algumas informações extras.
fonte
Tentei as respostas aqui e descobri que a mais útil e mais fácil ainda não está listada como resposta, mas é:
Isso imprime os cabeçalhos PEDIDO , bem como os cabeçalhos RESPONSE, além de outros úteis, como o certificado SSL, e se uma conexão TCP existente foi reutilizada. o
-v
sinalizador pode ser combinado com outros sinalizadores, é claro, como seguir redirecionamentos e solicitar autenticação HTTP:Espero que isto ajude.
fonte
Um comando como o abaixo mostrará três seções: cabeçalhos de solicitação, cabeçalhos de resposta e dados (separados por CRLF). Evita informações técnicas e ruídos sintáticos adicionados pelo curl.
O comando produzirá a seguinte saída:
Descrição:
-vs
- adicione cabeçalhos (-v) mas remova a barra de progresso (-s)2>&1
- combine stdout e stderr em stdout únicosed
- editar resposta produzida por curl usando os comandos abaixo/^* /d
- remova linhas começando com '*' (informações técnicas)/bytes data]$/d
- remover linhas que terminam com 'bytes data]' (informações técnicas)s/> //
- remova o prefixo '>'s/< //
- remova o prefixo '<'fonte
Eu sei que é um pouco tarde, mas meu método preferido para fazer isso é
netcat
, pois você recebe exatamente o que foicurl
enviado; isso pode diferir das opções--trace
ou--trace-ascii
que não mostram caracteres não-ASCII corretamente (eles apenas aparecem como pontos ou precisam ser decodificados).Você pode fazer isso com muita facilidade abrindo duas janelas de terminal, no primeiro tipo:
Isso abre um processo de escuta na porta 12345 da sua máquina local.
Na segunda janela do terminal, digite seu comando curl, por exemplo:
Na primeira janela do terminal, você verá exatamente qual onda foi enviada na solicitação.
Agora, é claro
nc
, não enviará nada em resposta (a menos que você o digite), portanto, você precisará interromper o comando curl (control-c) e repetir o processo para cada teste.No entanto, essa é uma opção útil para simplesmente depurar sua solicitação, pois você não envolve uma viagem de ida e volta a lugar nenhum ou produz solicitações falsas e iterativas em algum lugar até que você acerte; Quando estiver satisfeito com o comando, basta redirecioná-lo para um URL válido e pronto.
Você também pode fazer o mesmo em qualquer biblioteca cURL; basta editar sua solicitação para apontar para o
nc
ouvinte local até que você esteja feliz com isso.fonte
despejar os cabeçalhos em um arquivo e a carga da resposta em um arquivo diferente
fonte
Você também pode usar a
-I
opção se desejar enviar uma solicitação HEAD e não uma solicitação GET.fonte
Aqui está o meu cliente http no php para fazer consultas postadas com cookies incluídos:
/// info DEBUG echo $ response; var_dump (curl_getinfo ($ ch)); ///
fonte
Você pode vê-lo usando
-iv
fonte
Você pode usar o wireshark ou o tcpdump para procurar qualquer tráfego de rede (http também).
fonte
Faça uma solicitação de amostra para https://http-tools.appspot.com/reflect-http-request/some-unique-id e verifique o que esta solicitação contém (cabeçalho da solicitação, corpo da solicitação, parâmetros da solicitação) pelo URL localizador correspondente https : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . Você pode usar qualquer string em vez de
some-unique-id
, confira https://http-tools.appspot.com para obter mais detalhes.fonte