2013-03-18 40 views
8

Nếu tôi không nhầm, theo UrlFetch Documentation tôi sẽ có thể gọi số New Basecamp API từ bên trong Google Apps Script. Tôi nghi ngờ sự nhầm lẫn của tôi đến từ một lỗi định dạng GAS (và thực tế là tôi chỉ mới bắt đầu tất cả điều này). Tôi đã googled này một thời gian dài. Đây là những gì tôi có và lỗi tôi nhận lại từ GAS:Google Apps Script và API bên ngoài

MyCode ở GAS:

function myFunction() { 
    var url = "https://basecamp.com/******/api/v1/projects.json"; 
    var headers = { 
       "contentType": "application/json", 
       "headers":{ "User-Agent": "MY_APP_NAME", 
          "username:password" : "user:pass"}, 
       "validateHttpsCertificates" :false 
       }; 

var response = UrlFetchApp.fetch(url, headers); 
var text = response.getResponseCode(); 
Logger.log(text); 
} 

nhắn GAS Lỗi:

Request failed for https://basecamp.com/2166446/api/v1/projects.json returned code 401. 
Server response: HTTP Basic: Access denied. (line 9, file "Code") 

Tôi hy vọng đây là một câu hỏi hợp lý và cảm ơn bạn để được giúp đỡ.

Trả lời

15

Tiêu đề chính xác cho HTTP Basic Authentication, mà làm cho sử dụng Utilities.base64Encode, là như sau:

"headers": { 
    "User-Agent": "MY_APP_NAME (App URL/your email address)", 
    "Authorization": "Basic " + Utilities.base64Encode(username + ":" + password) 
}, 
+0

tuyệt vời! Cảm ơn! Công trình tuyệt vời –

+0

có trang web nơi thông tin này là để tôi có thể tìm hiểu không? –

+1

@ mat10112: Thông tin ở khắp mọi nơi. Tôi đã bắt đầu với liên kết tới API trong bài đăng gốc của bạn, nơi nó được đề cập rằng bạn có thể sử dụng xác thực cơ sở HTTP. Vì dễ sử dụng hơn OAuth, tôi đã truy cập Wikipedia để kiểm tra kỹ tiêu đề chính xác để sử dụng cho xác thực cơ sở HTTP. Sau đó, tôi đã xem trang tài liệu [App Script API] (https://developers.google.com/apps-script/), vì tôi biết họ có một số tiện ích tích hợp sẵn. Sau đó, tôi chỉ cần đặt nó lại với nhau. –

Các vấn đề liên quan