curl - origin - test cors
¿Cómo puedes depurar una solicitud CORS con cURL? (3)
¿Cómo puedes depurar las solicitudes CORS usando cURL? Hasta ahora no he podido encontrar ninguna forma de "simular" la solicitud de verificación previa.
Respuesta actualizada que cubre la mayoría de los casos.
curl -H "Access-Control-Request-Method: GET" -H "Origin: http://localhost" --head http://www.example.com/
- Reemplace http: // localhost con la URL que desea probar.
- Si la respuesta incluye
Access-Control-Allow-*
, su recurso es compatible con CORS.
Razonamiento para respuesta alternativa
Busco en Google esta pregunta de vez en cuando y la respuesta aceptada nunca es lo que necesito. Primero imprime el cuerpo de la respuesta que es mucho texto. Añadiendo ---head
salidas de ---head
solo encabezados. En segundo lugar, al probar las URL de S3, debemos proporcionar un encabezado adicional -H "Access-Control-Request-Method: GET"
.
Espero que esto ahorre tiempo.
Aquí es cómo puede depurar las solicitudes CORS utilizando curl.
Enviando una solicitud CORS regular usando cUrl:
curl -H "Origin: http://example.com" --verbose /
https://www.googleapis.com/discovery/v1/apis?fields=
El -H "Origin: http://example.com"
es el dominio de terceros que realiza la solicitud. Sustituye en cualquiera que sea tu dominio.
El indicador --verbose
imprime la respuesta completa para que pueda ver los encabezados de solicitud y respuesta.
La URL que utilizo anteriormente es una solicitud de muestra de una API de Google que admite CORS, pero puede sustituirla en la URL que esté probando.
La respuesta debe incluir el encabezado Access-Control-Allow-Origin
.
Enviando una solicitud de verificación previa utilizando cUrl:
curl -H "Origin: http://example.com" /
-H "Access-Control-Request-Method: POST" /
-H "Access-Control-Request-Headers: X-Requested-With" /
-X OPTIONS --verbose /
https://www.googleapis.com/discovery/v1/apis?fields=
Esto parece similar a la solicitud normal de CORS con algunas adiciones:
Los indicadores -H
envían encabezados de solicitud de verificación previa adicionales al servidor
El indicador -X OPTIONS
indica que se trata de una solicitud de OPCIONES HTTP.
Si la solicitud de verificación previa es exitosa, la respuesta debe incluir los Access-Control-Allow-Headers
respuesta Access-Control-Allow-Origin
, Access-Control-Allow-Methods
y Access-Control-Allow-Headers
. Si la solicitud de verificación previa no tuvo éxito, estos encabezados no deberían aparecer, o la respuesta HTTP no será 200.
También puede especificar encabezados adicionales, como User-Agent
, utilizando el -H
.
El guión de bash "corstest" a continuación funciona para mí. Se basa en Jun comentario Jun anterior.
uso
corstest [-v] url
ejemplos
./corstest https://api.coindesk.com/v1/bpi/currentprice.json
https://api.coindesk.com/v1/bpi/currentprice.json Access-Control-Allow-Origin: *
el resultado positivo se muestra en verde
./corstest https://github.com/IonicaBizau/jsonrequest
https://github.com/IonicaBizau/jsonrequest does not support CORS
you might want to visit https://enable-cors.org/ to find out how to enable CORS
El resultado negativo se muestra en rojo y azul.
La opción -v mostrará los encabezados de rizo completos
corstest
#!/bin/bash
# WF 2018-09-20
# https://.com/a/47609921/1497139
#ansi colors
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html
blue=''/033[0;34m''
red=''/033[0;31m''
green=''/033[0;32m'' # ''/e[1;32m'' is too bright for white bg.
endColor=''/033[0m''
#
# a colored message
# params:
# 1: l_color - the color of the message
# 2: l_msg - the message to display
#
color_msg() {
local l_color="$1"
local l_msg="$2"
echo -e "${l_color}$l_msg${endColor}"
}
#
# show the usage
#
usage() {
echo "usage: [-v] $0 url"
echo " -v |--verbose: show curl result"
exit 1
}
if [ $# -lt 1 ]
then
usage
fi
# commandline option
while [ "$1" != "" ]
do
url=$1
shift
# optionally show usage
case $url in
-v|--verbose)
verbose=true;
;;
esac
done
if [ "$verbose" = "true" ]
then
curl -s -X GET $url -H ''Cache-Control: no-cache'' --head
fi
origin=$(curl -s -X GET $url -H ''Cache-Control: no-cache'' --head | grep Access-Control)
if [ $? -eq 0 ]
then
color_msg $green "$url $origin"
else
color_msg $red "$url does not support CORS"
color_msg $blue "you might want to visit https://enable-cors.org/ to find out how to enable CORS"
fi