如何使用nsIWebBrowserPersist发布数据?

时间:2012-01-08 07:02:02

标签: firefox-addon

我需要使用saveURI用法下载文件(nsIWebBrowserPersist)。但该文件应该作为POST请求。怎么做?

2 个答案:

答案 0 :(得分:3)

nsIWebBrowserPersist.saveURI()采用aPostData参数 - 如果您传递输入流,则会发出POST请求。如果您要发送一些简单数据,使用nsIStringInputStream应该是最简单的,如下所示:

var data = "a=1&b=2";
var stream = Components.classes["@mozilla.org/io/string-input-stream;1"]
                       .createInstance(Components.interfaces.nsIStringInputStream);
stream.setData(data, data.length);
webBrowserPersist.saveURI(uri, null, null, stream, null, file);

答案 1 :(得分:0)

这是工作代码(感谢来自IRC #extdev的BenB):

    var dataString = "name1=data1&name2=data2";  
    var stringStream = Components.classes["@mozilla.org/io/string-input-stream;1"].  
                       createInstance(Components.interfaces.nsIStringInputStream);  
    if ("data" in stringStream) // Gecko 1.9 or newer  
      stringStream.data = dataString;  
    else // 1.8 or older  
      stringStream.setData(dataString, dataString.length);  

    var postData = Components.classes["@mozilla.org/network/mime-input-stream;1"].  
                   createInstance(Components.interfaces.nsIMIMEInputStream);  
    postData.addHeader("Content-Type", "application/x-www-form-urlencoded");  
    postData.addContentLength = true;  
    postData.setData(stringStream);   

    persist.saveURI(fURI, null, aReferrer, postData, "", file);

https://developer.mozilla.org/en/Code_snippets/Post_data_to_window#Preprocessing_POST_data