Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# nsIXMLHttpRequest.h fait-il partie du gecko-sdk 1.8 ? Si non, comment faire facilement une requête http en C++ dans un composant xpcom ?

Envoyé par : demoni

Date : 17/07/2008 12:26

Bonjour,

Je souhaite utiliser nsIXMLHttpRequest dans un composant xpcom que je code en C++. Or il semble que nsIXMLHttpRequest.h ne soit pas dans gecko-sdk 1.8. Si c'est vraiment le cas, quel est le meilleur moyen de faire une requête http en c++ dans un composant xpcom?

Merci d'avance.

  • Kevin

# Re: nsIXMLHttpRequest.h fait-il partie du gecko-sdk 1.8 ? Si non, comment faire facilement une requête http en C++ dans un composant xpcom ?

Envoyé par : Paul Rouget

Date : 18/07/2008 11:43

Utilise le channel http plutot.

# Re: nsIXMLHttpRequest.h fait-il partie du gecko-sdk 1.8 ? Si non, comment faire facilement une requête http en C++ dans un composant xpcom ?

Envoyé par : demoni

Date : 18/07/2008 11:59

Merci, c'est ce que j'ai fait. Pour ceux qui cherchent :

// Create a IO service
nsCOMPtr<nsIIOService> ioServ = do_GetService("@mozilla.org/network/io-service;1");
// Get (char*) url
nsEmbedCString uriString(url.c_str());
// Create a new URI
nsCOMPtr<nsIURI> uri;
rv = ioServ->NewURI(uriString, nsnull, nsnull, getter_AddRefs(uri));
NS_ENSURE_SUCCESS(rv, rv); 
// Create a new channel
nsCOMPtr<nsIChannel> channel;
rv = ioServ->NewChannel(uriString, nsnull, nsnull, getter_AddRefs(channel));
NS_ENSURE_SUCCESS(rv, rv); 
// Create a listener
nsCOMPtr<nsIStreamListener> listener = new MyListener();
rv = channel->AsyncOpen(listener, nsnull);
NS_ENSURE_SUCCESS(rv, rv);

///

class MyListener : public nsIStreamListener
{
public:
    NS_DECL_ISUPPORTS
    NS_DECL_NSIREQUESTOBSERVER
    NS_DECL_NSISTREAMLISTENER

    MyListener() { }
    virtual ~MyListener() {}
};

NS_IMPL_ISUPPORTS2(MyListener,
                   nsIRequestObserver,
                   nsIStreamListener)

NS_IMETHODIMP
MyListener::OnStartRequest(nsIRequest *req, nsISupports *ctxt)
{
    printf(">>> OnStartRequest\n");
    return NS_OK;
}

 NS_IMETHODIMP
 MyListener::OnStopRequest(nsIRequest *req, nsISupports *ctxt, nsresult status)
 {
    printf(">>> OnStopRequest status=%x\n", status);
    gKeepRunning = PR_FALSE;
    return NS_OK;
 }

 NS_IMETHODIMP
 MyListener::OnDataAvailable(nsIRequest *req, nsISupports *ctxt,
                            nsIInputStream *stream,
                            PRUint32 offset, PRUint32 count)
 {
 
    printf(">>> OnDataAvailable [count=%u]\n", count);

    char buf[256];
    nsresult rv;
    PRUint32 bytesRead=0;

    while (count) {
        PRUint32 amount = PR_MIN(count, sizeof(buf));

        rv = stream->Read(buf, amount, &bytesRead);
        if (NS_FAILED(rv)) {
            printf(">>> stream->Read failed with rv=%x\n", rv);
            //return rv;
        }

        fwrite(buf, 1, bytesRead, stdout);

        count -= bytesRead;
    }
 
    return NS_OK;
}
  • Kevin

# Re: nsIXMLHttpRequest.h fait-il partie du gecko-sdk 1.8 ? Si non, comment faire facilement une requête http en C++ dans un composant xpcom ?

Envoyé par : demoni

Date : 18/07/2008 12:01

Hmm, en fait, j'ai utilisé un channel simple parce que je ne voyais pas comment utiliser le http channel.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.