0

このサービスに接続して xml を返すためのヘルプを探しています。

手順は次のとおりです(ここから):

入力とリレーの状態は、XML ページ state.xml のポート 80 (または設定で指定されたポート) に要求を送信することで監視できます。リレーは、ポート 80 (またはセットアップで指定されたポート) の同じページに GET 要求を送信することによって制御できます。これは、Web ブラウザの URL 行にコマンドを入力することで確認できます。

現在の状態をリクエストする: http://"ip address"/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==ユーザー名とパスワードの base 64 でエンコードされたバージョンはどこにありますか none: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);
}

どんな助けでも大歓迎です。

4

1 に答える 1

4

簡単に対処できるコーディング エラーがいくつかあります。

  1. Authorization ヘッダーでは、「Basic」の後にスペースが必要です。
    Authorization : "Basic " + Utilities.base64Encode(username+':'+password)

  2. urlFetchApp.fetch()は HTTP 応答オブジェクトを返すため、解析のためにコンテンツを抽出する必要があります。
    var result = UrlFetchApp.fetch(url, options);
    var state = result.getContentText();

  3. 関数から何も返していませんparse()

  4. result.getResponseCode()の後にチェックし.fetch()、解析を進める前にエラーを処理する必要があります。

とはいえ、エラーが発生し続けるためBad request: http://75.65.130.27/state.xml、まだ何かが正しくありません。これは HTTP 400 応答であり、Google のサーバーはスクリプト デバッガーに何も返さず、掘り下げません。ユーザー名とパスワードを確認する必要がありますが、間違っている場合は 401-Unauthorized 応答が返されると思います。payloadofを含めてみましたrelay1State=2が、同じBad request結果が得られました。サーバーにヒットする HTTP リクエストをキャプチャできれば、不正な形式の手がかりが得られる可能性があります。これは、ファイアウォールの結果である可能性もあります。

それがソートされたら、このチュートリアルは XML 解析に役立つはずです。

これがあなたのコードの私の編集です:

function webRelay(){
  var url = 'http://75.65.130.27/state.xml';
  var username = "none";
  var password = "webrelay";

  var headers =
  {
    Authorization : "Basic " + Utilities.base64Encode(username+':'+password)
  }

  var options =
  {
    "method" : "get",
    "headers": headers
  };

  // Getting "bad request" here - check the username & password
  var result = UrlFetchApp.fetch(url, options);
  var state=result.getContentText(); 

  // You should check state.getResponseCode()

  Logger.log('1: '+state);
  Logger.log(parse(state));
}

function parse(txt) {
  var doc = Xml.parse(txt, true);
  return doc;                            // Return results
}
于 2013-03-28T15:29:54.403 に答える