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.