Modifier la réponse HTTP dans l'extension Chrome
P粉038161873
2023-08-21 23:44:53
<p>Est-il possible de créer une extension Chrome capable de modifier le corps de la réponse HTTP ? </p>
<p>J'ai examiné l'API de l'extension Chrome et je n'ai rien trouvé qui puisse implémenter cette fonctionnalité. </p>
Je viens de publier une extension Devtools qui fait exactement cela :)
Cela s'appelle tamper, basé sur mitmproxy, et il vous permet de visualiser toutes les demandes faites par l'onglet actuel, de les modifier et de servir la version modifiée lors de la prochaine actualisation.
Il s'agit d'une version assez ancienne mais devrait être compatible avec OS X et Windows. Si cela ne fonctionne pas pour vous, faites-le-moi savoir.
Vous pouvez l'obtenir ici : http://dutzi.github.io/tamper/
Comment ça marche
Comme le dit le commentaire de @Xan ci-dessous, l'extension communique via une messagerie native avec un script Python qui étend mitmproxy.
Cette extension utilise
chrome.devtools.network.onRequestFinished
pour lister toutes les demandes.Lorsque vous répondez à l'une des requêtes, il télécharge sa réponse à l'aide de la méthode
getContent()
de l'objet de requête, puis envoie cette réponse à un script Python enregistré localement.Il ouvre ensuite le fichier dans un éditeur en utilisant
call
(对于OSX)或subprocess.Popen
(pour Windows).Le script Python utilise mitmproxy pour écouter toutes les communications passant par le proxy et s'il détecte une demande pour un fichier enregistré, il servira le fichier enregistré.
J'ai utilisé l'API proxy de Chrome (en particulier
chrome.proxy.settings.set()
) pour définir le PAC comme paramètres de proxy. Ce fichier PAC redirige toutes les communications vers le proxy du script Python.La meilleure chose à propos de mitmproxy est qu'il peut également modifier la communication HTTPS. Vous pouvez donc l'utiliser aussi :)
En général, vous ne pouvez pas modifier le corps de la réponse d'une requête HTTP à l'aide de l'API d'extension Chrome standard.
Cette fonctionnalité est demandée sur 104058 : API WebRequest : Autoriser l'extension à modifier le corps de la réponse . Ajoutez cette question à vos favoris pour être informé des mises à jour.
Si vous souhaitez modifier le corps de la réponse d'un
XMLHttpRequest
connu, veuillez transmettre le script de contenu Injecter du codeXMLHttpRequest
的响应体,请通过内容脚本注入代码,以覆盖默认的XMLHttpRequest
构造函数,使用自定义(功能完整的)构造函数在触发真实事件之前重写响应体。确保您的XMLHttpRequest对象与Chrome内置的XMLHttpRequest
pour remplacer le constructeur par défautXMLHttpRequest
et utiliser un constructeur personnalisé (fonctionnalité complète) La fonction réécrit le corps de la réponse avant de déclencher l'événement réel. Assurez-vous que votre objet XMLHttpRequest est entièrement compatible avec l'objetXMLHttpRequest
intégré à Chrome, sinon cela entraînera des problèmes sur les sites Web utilisant beaucoup d'AJAX.Dans d'autres cas, vous pouvez utiliser
L'API redirige les requêtes verschrome.webRequest
chrome.webRequest
或chrome.declarativeWebRequest
API将请求重定向到data:
-URI。与XHR方法不同,您将无法获取原始请求的内容。实际上,请求永远不会到达服务器,因为重定向只能在实际请求发送之前完成。如果您重定向main_frame
请求,用户将看到data:
ou chrome.declarativeWebRequestdata :
-URI. Contrairement à l’approche XHR, vous ne pourrez pas récupérer le contenu de la requête initiale. En fait, la requête n’atteint jamais le serveur car la redirection ne peut être effectuée qu’avant l’envoi de la requête proprement dite. Si vous redirigez une requêtemain_frame
, l'utilisateur verra ledata:
-URI au lieu de l'URL demandée. 🎜