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.
Envoyé par : Paul Rouget
Date : 18/07/2008 11:43
Utilise le channel http plutot.
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; }
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.