2017-01-19 47 views
1

我試圖製作一個腳本,它可以在routexl API的幫助下制定出傳遞多個位置的最快路線。但是,我嘗試的所有內容似乎都會出現409截斷的服務器響應錯誤。我的代碼如下。Google腳本API routexl錯誤409

function myFunctionpost() { 
     var url = "https://api.routexl.nl/distances"; 
     var places = [{"address":"1","lat":"52.05429","lng":"4.248618"},{"address":"2","lat":"52.076892","lng":"4.26975"},{"address":"3","lat":"51.669946","lng":"5.61852"}]; 
     var locations = JSON.stringify(places); 
     var headers = { 
      "Authorization":"Basic " + Utilities.base64Encode("Username:password"), 
      "Content-Type":"application/json" 
     }; 
     var options = { 
      'method' : 'post', 
      'headers' : headers, 
      'contentType': 'application/json', 
      'payload' : locations, 
      'muteHttpExceptions' : true 
     }; 
     var response = UrlFetchApp.fetch(url, options); 
     //var json = response.getContentText(); 
     //var data = JSON.parse(json); 
     Logger.log(response); 
    } 
+0

添加'muteHttpExceptions:TRUE'到你的選擇。 409可能意味着該服務不喜歡你的有效載荷。有了muteHttpExceptions,響應中可能會有更多的數據。 –

+0

謝謝@SpencerEaston我添加了這個,因爲你的建議,這給了我另一個'語法錯誤,意外的令牌:N'行'VAR數據= JSON.parse(JSON);'的問題,所以我現在才評論這一點記錄響應。我們在日誌中給出的新信息是'沒有找到任何輸入'。 – codeacker

回答

0

409錯誤表示有no input找到。我不是Google Apps專家,但RouteXL API需要「位置」作爲輸入參數。在您的示例中,位置JSON在沒有地址碼的情況下發布。

更新:在對Google Apps腳本進行一些測試之後,我還發現需要調整ContentType。

這裏是爲我工作的例子:

function myFunctionpost() { 
     var url = "https://api.routexl.nl/distances"; 
     var places = [{"address":"1","lat":"52.05429","lng":"4.248618"},{"address":"2","lat":"52.076892","lng":"4.26975"},{"address":"3","lat":"51.669946","lng":"5.61852"}]; 
     var locations = JSON.stringify(places); 
     var headers = { 
      "Authorization":"Basic " + Utilities.base64Encode("username:password") 
     }; 
     var options = { 
      'method' : 'post', 
      'headers' : headers, 
      'contentType': 'application/x-www-form-urlencoded', 
      'payload' : {'locations': locations}, 
      'muteHttpExceptions' : true 
     }; 
     var response = UrlFetchApp.fetch(url, options); 
     //var json = response.getContentText(); 
     //var data = JSON.parse(json); 
     Logger.log(response); 
    } 
+0

只需要JSON.stringify負載值,並應該這樣做。 –

+0

@SpencerEaston不是已經? var locations = JSON.stringify(places); – RouteXL

+0

我註冊了這個測試。我已經嘗試了發佈數據的每種組合,但我無法使其工作。我甚至使用API​​文檔中的示例數據...我可以點擊狀態頁面,只是距離端點不會以任何形式接受發佈數據。 –