如何使用 nsIWebBrowserPersist 发布数据?

发布于 2024-12-26 02:16:16 字数 99 浏览 0 评论 0原文

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

I need to download the file (saveURI) with nsIWebBrowserPersist usage. But the file should be requested as POST. How to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

明媚殇 2025-01-02 02:16:16

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);

nsIWebBrowserPersist.saveURI() takes an aPostData parameter - if you pass an input stream there a POST request will made. If you are sending some simple data, using nsIStringInputStream should be easiest, something like this:

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);
撧情箌佬 2025-01-02 02:16:16

这是工作代码(感谢 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

Here is the working code (thanks to BenB from IRC #extdev):

    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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文