nsIWebBrowserPersist の saveURI で POST する方法
よくわからなくてちょっとはまったので、メモるよ。
let download = function (url, filepath, referer, postDataText) { let dm = Cc["@mozilla.org/download-manager;1"].getService(Ci.nsIDownloadManager); let wbp = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Ci.nsIWebBrowserPersist); // リファラ let refererURI = Cc['@mozilla.org/network/standard-url;1'].createInstance(Ci.nsIURI); refererURI.spec = referer; // キャッシュ let cache = null; try { let sh = getWebNavigation().sessionHistory; cache = sh.getEntryAtIndex(sh.index, false).QueryInterface(Ci.nsISHEntry).postData; } catch (e) { /* DO NOTHING */ } // 保存先 let localfile = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile); localfile.initWithPath(filepath); let file = makeFileURI(localfile); // ダウンロードマネージャに登録 let dl = dm.addDownload(0, makeURL(url, null, null), file, 'Title', null, null, null, null, wbp); wbp.progressListener = dl; wbp.persistFlags = wbp.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION; // POST 用のデータ構築 let postStream = Cc["@mozilla.org/io/string-input-stream;1"] .createInstance(Ci.nsIStringInputStream); postStream.setData(postDataText, postDataText.length); let postData = Cc["@mozilla.org/network/mime-input-stream;1"].createInstance(Ci.nsIMIMEInputStream); postData.addHeader("Accept-Charset", "utf-8"); postData.addHeader("Content-Type", "application/x-www-form-urlencoded"); postData.addContentLength = true; postData.setData(postStream); // ダウンロード開始! wbp.saveURI(makeURL(url), cache, refererURI, postData, null, file); }; // POST先URL 保存先 リファラ POST内容 download('http://example.com/api', '/tmp/post-test.html', 'http://example.net/', 'anekos_eq_id:nokturnalmortum');
例のPOST先は特に意味がないので、テストする場合は適当に変えてください。