尋找連接到此服務並返回xml的幫助。對UrlFetchApp的錯誤請求
這裏是指令(從here):
的輸入端和繼電器的狀態可以通過發送 請求到端口80(或端口中設置指定)用於 XML頁面狀態進行監視.XML。可以通過發送GET請求到端口80上的 相同頁面(或在安裝程序中指定的端口)來控制繼電器。這可以通過將命令輸入到Web瀏覽器的URL行中來演示,如 。
請求的當前狀態:HTTP:// 「IP地址」 /state.xml
...
如果控制密碼在WebRelay-DualTM單元啓用並 的state.xml頁面是通過瀏覽器請求的,瀏覽器會提示用戶輸入密碼 。如果XML請求是從 發送的另一個應用程序而不是瀏覽器,則html請求將需要 包含使用base 64編碼方案編碼的密碼。沒有密碼的 HTML請求報頭是這樣的:
GET /state.xml?relay1State=1&noReply=1 HTTP/1.1 (Ends with two \r\n)
與密碼的HTML請求報頭是這樣的:
GET /state.xml?relay1State=1&noReply=1 HTTP/1.1(\r\n here) Authorization: Basic bm9uZTp3ZWJyZWxheQ== (Ends with two \r\n)
其中
bm9uZTp3ZWJyZWxheQ==
是 用戶名的基64編碼的版本和密碼無:webrelay
代碼:
function webRelay(){
//working url http://75.65.130.27/state.xml
var url = 'http://75.65.130.27/';
var params = encodeURIComponent('state.xml');
Logger.log(params);
var headers = {
"Authorization" : "Basic" + Utilities.base64Encode('none:webrelay')
};
var options =
{
"method" : "get",
"headers" : headers
};
var state = UrlFetchApp.fetch(url+params, options);
Logger.log('1: '+state);
Logger.log(parse(state));
}
function parse(txt) {
var doc = Xml.parse(txt, true);
}
任何幫助非常感謝。
問題是否需要授權「」沒有?而且我也被卡住了,我重置了這個單位,試着改變了這個單詞,結果還是一樣。如果你把用戶名關掉,它會返回401,因此它最終得到單位因爲。最後一個問題是什麼是附加有效載荷的正確方法。 var payload = {「?relay1State =」:「2」} - 再次感謝這有助於 – LennyZ71 2013-03-28 21:52:20
Auth需要''Basic''和編碼位之間的空格,我使用''Basic''。在''上不需要:''。有效載荷將是'var payload = {relay1State:「2」}'。你能捕獲來自應用程序的HTTP數據包 - 腳本雲嗎? (在交換機/路由器上的端口鏡像?Wireshark?) – Mogsdad 2013-03-29 02:47:32
Mogs,感謝您的幫助,我終於弄清楚了這個問題。該單元實際上是接收命令,你必須直接將有效載荷添加到URL。但它自己的單元不會返回標題,這就是爲什麼我們不斷收到錯誤的請求。您的代碼調整確實幫助我創建了連接,再次感謝 – LennyZ71 2013-03-30 03:51:54