Ich versuche, einen JSON/JSONP-Proxy für eine externe API zu erstellen. Hier ist meine bisherige Konfiguration:
server {
listen 80;
server_name api.example.com;
location /api/ {
if ( $arg_callback ) {
echo_before_body '$arg_callback(';
echo_after_body ');';
}
if ($args ~ (.*)callback=[^&]*(.*)) {
set $args $1$2;
}
proxy_pass http://api.external.com;
rewrite ^/api/(.*)$ /external/api/$1?api_key=MY_KEY$is_args$args break;
}
}
Der Proxy funktioniert ohne callback
Parameter einwandfrei und gibt gültiges JSON zurück. Wenn ich jedoch das einschließe callback
, gibt es trotzdem nur JSON ohne den darum gewickelten Rückruf zurück. Ich muss den callback
Parameter entfernen, bevor ich die externe API aufrufe, da sie einen Fehler zurückgibt, wenn die Anfrage nicht erkannte Optionen enthält. Wie kann ich den Rückrufparameter aus der Anfrage entfernen (falls er existiert), bevor ich die Anfrage weitergebe, ihn aber trotzdem zum Erstellen des JSONP verwenden?
Antwort1
hast du gelesenwenn es böse ist?
es gibt immer noch nur JSON ohne Wrapper zurück.
was ist hier für dich der Wrapper? das erste/das zweite IF oder beide?
BEARBEITEN:
ich würde ein einfaches Debugging durchführen, um zu testen, ob Ihr regulärer Ausdruck gültig ist (erhöhen Sie die Protokollebene, um zu sehen, was passiert) (Lösung ist ungetestet)
server {
listen 80;
server_name api.example.com;
location /api/ {
rewrite ^/(.*)callback=[^&]*(.*)$ /testurl/$1/$2 last;
}
location /testurl {
return 200;
}
}
nach diesem Schritt würde ich die zweite IF - Anweisung einfügen, und wenn das funktioniert, die erste schließlich
wie sieht Ihre URL mit diesen Rückrufparametern aus?