2016-08-24 162 views
2

我試圖使用由網站提供的zoom.us API。他們給我捲曲命令來創建一個新用戶:將cURL命令轉換爲ajax

curl --data 'api_key=your_api_key&api_secret=your_api_secret&[email protected]&type=1&first_name=John&last_name=Smith' https://api.zoom.us/v1/user/create 

我翻譯成AJAX:

$.ajax({ 
     url: 'https://api.zoom.us/v1/user/create', 
     type: "POST", 
     cache: true, 
     async: false, 
     headers: { 
      'Content-Type': 'application/json' 
     }, 
     data: JSON.stringify({ 'api_key': 'key', 'api_secret': 'secret', 'email': '[email protected]', 'first_name': 'John', 'last_name': 'Smith' }), 
     success: function (res) { 
      console.log(res); 
     }, 
     error: function (err) { 
      console.error(err); 
     } 
    }); 

(注:「API_KEY」和「api_secret」的變量只是在上面的佔位符例如,我有我自己的密鑰和祕密,我試圖使這個API調用時使用)

但是,此代碼不適用於我。我得到以下403錯誤:

XMLHttpRequest cannot load https://api.zoom.us/v1/user/create. 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://mywebsite.com' is therefore not allowed access. The response had HTTP status code 403. 

我的問題是這樣的:我做錯了什麼?我錯誤翻譯了什麼嗎?此外,我知道類似的問題之前已經被問到(這是我如何提出我的翻譯代碼上面),但他們無法解決我的問題

這裏是zoom.us文檔,以防萬一它有幫助: https://support.zoom.us/hc/en-us/articles/201363033-REST-User-API

ETA:後apokryfos的評論,這是我更新的代碼:

$.ajax({ 
    url: 'https://api.zoom.us/v1/user/create', 
    cache: true, 
    async: false, 
    data: { 'api_key': 'key', 'api_secret': 'secret', 'email': e, 'first_name': 'john', 'last_name': 'smith' }, 
    success: function (res) { 
     console.log(res); 
    }, 
    error: function (err) { 
     console.error(err); 
    } 
}); 

產生一個新的405錯誤:

XMLHttpRequest cannot load api.zoom.us/v1/user/create?api_key=key&api_secret =secret&email=test%40email.com&first_name=Juan&last_name=Gon‌​zalez. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'website.com'; is therefore not allowed access. 
+2

POST數據和JSON數據是不一樣的東西。你應該傳遞這個對象,而不要對它進行加密。也不要更改內容類型。 – apokryfos

+3

更常稱爲CORS(跨源資源共享)。如果你在每臺客戶端機器上放置API key/secrets,我會認爲你做錯了。 –

+0

感謝@apokryfos,解決了我的403錯誤,但現在我得到了一個新的405錯誤:XMLHttpRequest無法加載https://api.zoom.us/v1/user/create?api_key=key&api_secret = secret&email = test%40email.com&first_name =涓&姓氏=岡薩雷斯。請求的資源上沒有「Access-Control-Allow-Origin」標題。 Origin'http://website.com'因此不被允許訪問。該響應的HTTP狀態碼爲405. – Juan

回答

0

由於@apokryfos,我能夠找到正確的答案。

$.ajax({ 
    url: 'https://crossorigin.me/https://api.zoom.us/v1/user/create', 
    type: "POST", 
    cache: true, 
    async: false, 
    data: { 'api_key': 'key', 'api_secret': 'secret', 'email': e, 'first_name': f, 'last_name': l }, 
    success: function (res) { 
     console.log(res); 
    }, 
    error: function (err) { 
     console.error(err); 
    } 
}); 

}

+0

我還建議您與API提供商溝通,讓他們知道瀏覽器錯誤地將該Web服務的任何HTTP錯誤解釋爲CORS違規。這裏沒有CORS違規,只是遠程服務器並不表示它正在接受CORS請求,所以瀏覽器認爲錯誤是因爲這個。 – apokryfos

1

Tr的y一旦添加dataType:'jsonp'就像波紋管

$.ajax({ 
    url: 'https://api.zoom.us/v1/user/create', 
    cache: true, 
    dataType: 'jsonp' 
    async: false, 
    data: { 'api_key': 'key', 'api_secret': 'secret', 'email': e, 'first_name': 'john', 'last_name': 'smith' }, 
    success: function (res) { 
     console.log(res); 
    }, 
    error: function (err) { 
     console.error(err); 
    } 
});