2010-09-07 17 views
7

Je travaille avec PyQt4 et QtWebKit, et dans la demande de page Web, je dois envoyer un en-tête "Host" personnalisé avec la requête HTTP standard. Je ne vois aucune option pour ajouter des en-têtes personnalisés à la demande, mais c'est tout nouveau pour moi alors j'espère que quelque chose me manquera. Je cherche ici:Envoi d'un en-tête personnalisé avec la requête qtwebkit

http://doc.qt.digia.com/4.6/qwebsettings.html

Tout conseil serait grandement apprécié.

Répondre

11

Vous pouvez définir les en-têtes sur le QNetworkRequest qui est envoyé:

QNetworkRequest request; 
request.setUrl(QUrl("http://qt.nokia.com")); 
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0"); 

Pour utiliser cette demande personnalisée lors du chargement d'une page, utilisez la fonction load surcharge:

myWebView->load(request); 
+0

Est-ce que cela remplace tous les en-têtes par défaut, ou est-ce que cela ne fait qu'ajouter et remplacer des en-têtes existants? – lennysan

+0

Une idée de pourquoi ça se bloquerait quand j'utiliserais un "Host: mysite.com" mais fonctionne bien quand j'utilise "Host: www.mysite.com"? Je m'attendrais à ce que le serveur web réponde dans les deux cas, mais dans le premier cas, l'appel reste là indéfiniment. – lennysan

+0

Ce comportement dépend du serveur Web utilisé. Lorsqu'un serveur prend en charge plusieurs hôtes (virtuels), il doit utiliser l'en-tête 'host' pour déterminer à quel hôte virtuel la requête doit être envoyée. –

3

Si vous souhaitez appliquer à tous fait QtWebKit fait, vous pouvez sous-classer QNetworkAccessManager et réimplémenter sa fonction createRequest() pour modifier les en-têtes en conséquence.

+0

Pourriez-vous s'il vous plaît dire comment il est possible d'être implémenté si createRequest() accepte QNetworkRequest par une référence const? Comme je peux l'imaginer setHeader() ou setRawHeader() du QNetworkRequest correspondant devrait être appelé. – user2198121