Creo que curl -ves lo más fácil. Escupirá los encabezados de solicitud (líneas con el prefijo '>') sin tener que escribir en un archivo:
$ 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
...
curl -v -D - stackoverflow.com -o / dev / null (para no mostrar todo el contenido del sitio, solo encabezados)
omnomnom
20
curl -Ivs http://example.com > /dev/null: -Ipara una HEADsolicitud, -vpara mostrar encabezados enviados, -spara ocultar la barra de progreso, > /dev/nullpara mostrar solo la salida -v, evitando la duplicación.
aquí
@PiotrekDe -D -estaba ordenado, pero no fue útil para mí, ya que simplemente duplicaba los encabezados que -vya se mostraban. Si desea que no estén prefijados para el consumo automático de la máquina, tal vez sería mejor en ese caso, pero solo quería vislumbrar cuál era el problema con más detalle.
Pisis
1
Hay dos características muy útiles del indicador "detallado": primero, también imprime el proceso de enlace TLS cuando se accede al sitio web a través de HTTPS, como curl -v https://www.example.com; segundo, también imprime la CONNECTsolicitud si está visitando el sitio a través del proxy HTTP , como curl --proxy my-proxy:8080 http://www.example.com. Creo que ayudaría a más usuarios si se mencionan algunos ejemplos de estas dos características en esta respuesta.
Franklin Yu
1
TL; DR: No usar-I En el mundo moderno, cuando las personas preguntan sobre ver encabezados, probablemente estén hablando de API. Y si usa esa -Imentalidad de "Yo uso para ver los encabezados con mi servidor web Apache", perderá mucho tiempo desarrollando un HEADmétodo que probablemente quiera usar GET. Deja de decirle a la gente que use -I. Si lo desean HEAD, use -X HEAD(TWSS)
Bruno Bronosky
141
La pregunta no especificaba si el comando de línea de comando nombrado curlera la biblioteca completa de cURL.
El siguiente código PHP que usa la biblioteca cURL usa el primer parámetro como método HTTP (por ejemplo, "GET", "POST", "OPTIONS") y el segundo parámetro como URL.
Esta es la mejor respuesta, porque el archivo utilizado en este método contiene todo en curl_getinfo () al que se hace referencia a continuación, junto con más detalles sobre la solicitud y la respuesta.
Mike_K
3
Puede usar CURLOPT_WRITEHEADER para la información del encabezado y CURLOPT_FILE para toda la transferencia
sturrockad
1
Tenga en cuenta que si se rechaza la conexión, los archivos que se especificaron con CURLOPT_WRITEHEADER y CURLOPT_FILEestán vacíos.
Eithed
34
¿Quién dijo algo sobre el uso?php?
Eddie B
1
He votado tu respuesta porque, aunque la pregunta no estaba relacionada con php, tu respuesta basada en php me indicó la dirección correcta para resolver mi propio problema al enviar un token de portador. Gracias. Dije mi razón aquí solo en el vano intento de que esta pregunta aparezca en futuras búsquedas de google para desarrolladores de php con un problema similar.
Chris
49
La única forma en que pude ver mis encabezados salientes (curl con php) fue usando las siguientes opciones:
produce un archivo curl.traceque comienza de la siguiente manera:
== 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:
También recibió una respuesta (una respuesta 302, para ser precisos pero irrelevantes) que se registró.
Si solo desea guardar los encabezados de respuesta , use la --dump-headeropción:
curl -D file url
curl --dump-header file url
Si necesita más información sobre las opciones disponibles, úsela curl --help | less(produce unas doscientas líneas de salida pero menciona muchas opciones). O busque la página del manual donde hay más explicaciones de lo que significan las opciones.
Esto es muy detallado, pero ciertamente te muestra todo lo que debes saber.
tripleee
27
Intenté las respuestas aquí y descubrí que la más útil y fácil aún no figura como respuesta, pero es:
curl -v https://example.com/path
Esto imprime los encabezados de SOLICITUD , así como los encabezados de RESPUESTA, además de otros útiles, como el certificado SSL y si se reutilizó una conexión TCP existente. la -vbandera se puede combinar con otras banderas, por supuesto, como seguir redirecciones y solicitar autenticación HTTP:
Un comando como el siguiente mostrará tres secciones: encabezados de solicitud, encabezados de respuesta y datos (separados por CRLF). Evita la información técnica y el ruido sintáctico agregado por curl.
Sé que es un poco tarde, pero mi método preferido para hacerlo es netcat, ya que obtienes exactamente lo que curlenviaste; esto puede diferir de las opciones --traceu --trace-asciique no mostrarán caracteres que no sean ASCII correctamente (solo se muestran como puntos o necesitan ser decodificados).
Puede hacer esto tan fácilmente abriendo dos ventanas de terminal, en el primer tipo:
nc -l localhost 12345
Esto abre un proceso de escucha en el puerto 12345 de su máquina local.
En la segunda ventana de terminal, ingrese su comando curl, por ejemplo:
curl --form 'foo=bar' localhost:12345
En la primera ventana de terminal verá exactamente qué rizo se envió en la solicitud.
Ahora, por supuesto nc, no enviará nada en respuesta (a menos que lo escriba usted mismo), por lo que deberá interrumpir el comando curl (control-c) y repetir el proceso para cada prueba.
Sin embargo, esta es una opción útil para simplemente depurar su solicitud, ya que no está involucrando un viaje de ida y vuelta a ninguna parte, o produciendo solicitudes falsas e iterativas en algún lugar hasta que lo haga correctamente; una vez que estés satisfecho con el comando, simplemente redirígelo a una URL válida y listo.
También puede hacer lo mismo para cualquier biblioteca de cURL, simplemente edite su solicitud para señalar al ncoyente local hasta que esté satisfecho con ella.
// 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
Gracias, aunque no respondí exactamente la pregunta, esto es exactamente lo que necesitaba. El dispositivo A realiza una solicitud, el dispositivo B comprueba que se haya realizado una solicitud.
Respuestas:
Creo que
curl -v
es lo más fácil. Escupirá los encabezados de solicitud (líneas con el prefijo '>') sin tener que escribir en un archivo:fuente
curl -Ivs http://example.com > /dev/null
:-I
para unaHEAD
solicitud,-v
para mostrar encabezados enviados,-s
para ocultar la barra de progreso,> /dev/null
para mostrar solo la salida -v, evitando la duplicación.-D -
estaba ordenado, pero no fue útil para mí, ya que simplemente duplicaba los encabezados que-v
ya se mostraban. Si desea que no estén prefijados para el consumo automático de la máquina, tal vez sería mejor en ese caso, pero solo quería vislumbrar cuál era el problema con más detalle.curl -v https://www.example.com
; segundo, también imprime laCONNECT
solicitud si está visitando el sitio a través del proxy HTTP , comocurl --proxy my-proxy:8080 http://www.example.com
. Creo que ayudaría a más usuarios si se mencionan algunos ejemplos de estas dos características en esta respuesta.-I
En el mundo moderno, cuando las personas preguntan sobre ver encabezados, probablemente estén hablando de API. Y si usa esa-I
mentalidad de "Yo uso para ver los encabezados con mi servidor web Apache", perderá mucho tiempo desarrollando unHEAD
método que probablemente quiera usarGET
. Deja de decirle a la gente que use-I
. Si lo deseanHEAD
, use-X HEAD
(TWSS)La pregunta no especificaba si el comando de línea de comando nombrado
curl
era la biblioteca completa de cURL.El siguiente código PHP que usa la biblioteca cURL usa el primer parámetro como método HTTP (por ejemplo, "GET", "POST", "OPTIONS") y el segundo parámetro como URL.
Ejemplo de uso:
Tenga en cuenta que los resultados son casi idénticos a la siguiente línea de comando
fuente
CURLOPT_WRITEHEADER
yCURLOPT_FILE
están vacíos.php?
La única forma en que pude ver mis encabezados salientes (curl con php) fue usando las siguientes opciones:
Obteniendo su información de depuración:
fuente
var_dump $data
devolverá los encabezados de respuesta, así como el cuerpo de respuesta. Var_dumpcurl_getinfo($ch)
le dará los encabezados de solicitud.CURLOPT_HEADER
es el encabezado de respuesta:CURLINFO_HEADER_OUT
es el encabezado de la solicitud. Esto es lo que el OP está pidiendo :)La
--trace-ascii
opción de curl mostrará los encabezados de solicitud, así como los encabezados de respuesta y el cuerpo de respuesta.Por ejemplo, el comando
produce un archivo
curl.trace
que comienza de la siguiente manera:También recibió una respuesta (una respuesta 302, para ser precisos pero irrelevantes) que se registró.
Si solo desea guardar los encabezados de respuesta , use la
--dump-header
opción:Si necesita más información sobre las opciones disponibles, úsela
curl --help | less
(produce unas doscientas líneas de salida pero menciona muchas opciones). O busque la página del manual donde hay más explicaciones de lo que significan las opciones.fuente
curl --trace-ascii {filename} o use un solo guión en lugar del nombre del archivo para enviarlo a stdout:
CURLOPT_DEBUGFUNCTION si estás usando libcurl
Esto muestra todo lo que curl envía y recibe, con información adicional incluida.
fuente
Intenté las respuestas aquí y descubrí que la más útil y fácil aún no figura como respuesta, pero es:
Esto imprime los encabezados de SOLICITUD , así como los encabezados de RESPUESTA, además de otros útiles, como el certificado SSL y si se reutilizó una conexión TCP existente. la
-v
bandera se puede combinar con otras banderas, por supuesto, como seguir redirecciones y solicitar autenticación HTTP:Espero que esto ayude.
fuente
Un comando como el siguiente mostrará tres secciones: encabezados de solicitud, encabezados de respuesta y datos (separados por CRLF). Evita la información técnica y el ruido sintáctico agregado por curl.
El comando producirá el siguiente resultado:
Descripción:
-vs
- agregue encabezados (-v) pero elimine la barra de progreso (-s)2>&1
- combina stdout y stderr en stdout simplesed
- Edite la respuesta producida por curl utilizando los siguientes comandos/^* /d
- eliminar líneas que comienzan con '*' (información técnica)/bytes data]$/d
- eliminar líneas que terminan con 'datos de bytes]' (información técnica)s/> //
- eliminar el prefijo '>'s/< //
- eliminar el prefijo '<'fuente
Sé que es un poco tarde, pero mi método preferido para hacerlo es
netcat
, ya que obtienes exactamente lo quecurl
enviaste; esto puede diferir de las opciones--trace
u--trace-ascii
que no mostrarán caracteres que no sean ASCII correctamente (solo se muestran como puntos o necesitan ser decodificados).Puede hacer esto tan fácilmente abriendo dos ventanas de terminal, en el primer tipo:
Esto abre un proceso de escucha en el puerto 12345 de su máquina local.
En la segunda ventana de terminal, ingrese su comando curl, por ejemplo:
En la primera ventana de terminal verá exactamente qué rizo se envió en la solicitud.
Ahora, por supuesto
nc
, no enviará nada en respuesta (a menos que lo escriba usted mismo), por lo que deberá interrumpir el comando curl (control-c) y repetir el proceso para cada prueba.Sin embargo, esta es una opción útil para simplemente depurar su solicitud, ya que no está involucrando un viaje de ida y vuelta a ninguna parte, o produciendo solicitudes falsas e iterativas en algún lugar hasta que lo haga correctamente; una vez que estés satisfecho con el comando, simplemente redirígelo a una URL válida y listo.
También puede hacer lo mismo para cualquier biblioteca de cURL, simplemente edite su solicitud para señalar al
nc
oyente local hasta que esté satisfecho con ella.fuente
volcar los encabezados en un archivo y la carga útil de la respuesta en un archivo diferente
fuente
También puede usar la
-I
opción si desea enviar una solicitud HEAD y no una solicitud GET.fuente
Aquí está mi cliente http en php para hacer consultas posteriores con cookies incluidas:
/// DEBUG info echo $ respuesta; var_dump (curl_getinfo ($ ch)); ///
fuente
Puedes verlo usando
-iv
fuente
Puede usar wireshark o tcpdump para buscar en cualquier tráfico de red (http también).
fuente
Realice una solicitud de muestra a https://http-tools.appspot.com/reflect-http-request/some-unique-id y verifique qué contiene esta solicitud (encabezado de solicitud, cuerpo de solicitud, parámetros de solicitud) por su correspondiente URL de buscador https : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . Puede usar cualquier cadena en lugar de
some-unique-id
, consulte https://http-tools.appspot.com para obtener más detalles.fuente