Firefox addon 如何使用nsIWebBrowserPersist发布数据?

Firefox addon 如何使用nsIWebBrowserPersist发布数据?,firefox-addon,Firefox Addon,我需要下载使用nsIWebBrowserPersist用法的文件(saveURI)。但该文件应作为POST请求。如何操作?nsIWebBrowserPersist.saveURI()接受一个aPostData参数-如果传递一个输入流,将发出POST请求。如果您要发送一些简单的数据,使用应该是最简单的,如下所示: var data=“a=1&b=2”; var stream=Components.classes[“@mozilla.org/io/string输入流;1”] .createInsta

我需要下载使用
nsIWebBrowserPersist
用法的文件(
saveURI
)。但该文件应作为POST请求。如何操作?

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

var data=“a=1&b=2”;
var stream=Components.classes[“@mozilla.org/io/string输入流;1”]
.createInstance(Components.interfaces.nsIStringInputStream);
stream.setData(data,data.length);
saveURI(uri,null,null,stream,null,file);
以下是工作代码(感谢IRC#extdev的BenB):


谢谢你,瓦拉迪米尔。事实上,我需要下载文件后的要求,没有额外的数据应该被发送。但当我尝试使用您的方法时,我看到0字节的文件被下载,而我没有看到Wireshark的HTTP请求。。。
    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);