简体   繁体   中英

Firefox addon sdk Request module POST method with payload

I need to do a POST method inside a firefox add-on to another server, I have been trying to use different ways, and after googling I found out that I should use the Request module from the SDK inside my main.js.

I am using firefox v 23

I tried using the chrome module

var xmlhttp = chrome.Cc["@mozilla.org/xmlextras/xmlhttprequest;1"]
                        .createInstance(chrome.Ci.nsIXMLHttpRequest);

but I got NS_ERROR_FAILURE . I even added the permissions in the package.json

"permissions": {
    "cross-domain-content": ["https:[some url]"]
  }

But it still gives the same error.

I then used the Request module but didn't work so far. I tried a GET method with the Request module and it works fine. But the POST method always returns a 0 status and an empty response.

I tried doing the same request via a browser http client and it worked fine!! But through the code inside the add-on it always returns a 0.

The request sets headers and of course has a payload.

var contentObject = {[Valid JSON Object]};

var myRequest = Request({
    url: "https://[some url]",
    headers: {
           "pragma": "no-cache"
    },
    content: contentObject,
    contentType: "application/json", 
    onComplete: function (response) {
        console.log("Status: " + response.status);
        console.log("Response json: " + JSON.stringify(response));
    }
    }).post(); 

Your support is highly appreciated. There are very few resources I found over the internet about this issue and non of them solved my problem.

I guess the server script expects a JSON string representation of the contentObject. But this is not how objects are treated by the request module, they are turned to key/value pairs.

So change

content: contentObject

to

content: JSON.stringify(contentObject)

the POST method always returns a 0 status and an empty response

This might not be direct answer, but I had the same problem last couple of days. A friend who was connected to network via different provider tried the same code and it worked fine. Also, if I remember correctly, I could connect to the port 80 but not to the port where I was sending POST request so that port might be blocked on the network you are connected.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM