我正在嘗試為外部 API 建立 JSON/JSONP 代理程式。到目前為止,這是我的配置:
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;
}
}
代理在沒有參數的情況下工作正常callback
,傳回有效的 JSON。但是,當我包含 時callback
,它仍然只返回 JSON,而沒有回調圍繞它。我必須callback
在呼叫外部 API 之前刪除參數,因為如果請求包含無法識別的選項,它會傳回錯誤。如何在傳遞請求之前將回調參數從請求中剝離出來(如果存在),但仍使用它來建立 JSONP?
答案1
你讀過嗎如果是邪惡的?
它仍然只回傳 JSON,沒有包裝器。
這裡的包裝紙是什麼?第一個/第二個如果或兩者?
編輯:
我會做簡單的偵錯來測試您的正規表示式是否有效(增加日誌等級以查看發生了什麼)(解決方案未經測試)
server {
listen 80;
server_name api.example.com;
location /api/ {
rewrite ^/(.*)callback=[^&]*(.*)$ /testurl/$1/$2 last;
}
location /testurl {
return 200;
}
}
在此步驟之後,我將放入第二個 IF - 語句,如果有效,最後是第一個
你的 url 與回呼參數看起來怎麼樣?