Jak debugować żądanie CORS za pomocą cURL?
Jak można debugować żądania CORS za pomocą cURL? Jak dotąd nie mogłem znaleźć sposobu na "symulację" żądania inspekcji wstępnej .
3 answers
Oto jak można debugować żądania CORS za pomocą curl.
Wysyłanie zwykłego żądania CORS za pomocą cUrl:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Znacznik -H "Origin: http://example.com"
jest domeną strony trzeciej składającą żądanie. Zastąp cokolwiek Twoja domena jest.
Flaga --verbose
wyświetla całą odpowiedź, dzięki czemu można zobaczyć nagłówki żądania i odpowiedzi.
Adres URL, którego używam powyżej, jest przykładowym żądaniem do Google API, które obsługuje CORS, ale możesz zastąpić dowolny adres url testuję.
Odpowiedź powinna zawierać nagłówek Access-Control-Allow-Origin
.
Wysyłanie żądania inspekcji wstępnej za pomocą 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=
Wygląda to podobnie do zwykłego żądania Kors z kilkoma dodatkami:
Flagi -H
wysyłają dodatkowe nagłówki żądania inspekcji wstępnej do serwera
Znacznik -X OPTIONS
wskazuje, że jest to żądanie opcji HTTP.
Jeśli żądanie inspekcji wstępnej zakończy się sukcesem, odpowiedź powinna zawierać Access-Control-Allow-Origin
, Access-Control-Allow-Methods
, oraz Access-Control-Allow-Headers
nagłówki odpowiedzi. Jeśli żądanie inspekcji wstępnej nie powiodło się, te nagłówki nie powinny się pojawić lub odpowiedź HTTP nie będzie wynosić 200.
Możesz również określić dodatkowe nagłówki, takie jak User-Agent
, używając znacznika -H
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-29 14:01:12
Zaktualizowana odpowiedź, która obejmuje większość przypadków
curl -H "Access-Control-Request-Method: GET" -H "Origin: http://localhost" --head http://www.example.com/
- Zastąp http://localhost z adresem URL, który chcesz przetestować.
- Jeśli odpowiedź zawiera {[1] } to Twój zasób obsługuje CORS.
Uzasadnienie alternatywnej odpowiedzi
Googluję to pytanie co jakiś czas i zaakceptowana odpowiedź nigdy nie jest tym, czego potrzebuję. Najpierw drukuje ciało odpowiedzi, które jest dużo tekstu. Dodawanie ---head
wyprowadza tylko nagłówki. Po drugie podczas testowania adresów URL S3 musimy podaj dodatkowy nagłówek -H "Access-Control-Request-Method: GET"
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-22 13:29:32
Skrypt bash "corstest" poniżej działa dla mnie. Opiera się na komentarzu Jun powyżej.
Użycie
Corstest [- V] url
Przykłady
./corstest https://api.coindesk.com/v1/bpi/currentprice.json
https://api.coindesk.com/v1/bpi/currentprice.json Access-Control-Allow-Origin: *
Pozytywny wynik jest wyświetlany na Zielono
./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
Wynik ujemny jest wyświetlany na czerwono i niebiesko
Opcja-v wyświetli pełne nagłówki curl
Corstest
#!/bin/bash
# WF 2018-09-20
# https://stackoverflow.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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 16:32:00