2012-01-08 85 views

回答

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

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

謝謝,弗拉基米爾。其實我需要用POST請求下載文件,不應該發送額外的數據。但是當我試圖使用你的方法時,我看到0字節的文件被下載,並且我沒有看到Wireshark的HTTP請求... – 2012-01-09 12:39:24