2016-01-08 2 views
1

Я пытаюсь вернуть пользовательский отклик при использовании mitmproxy со следующим кодомВозврат пользовательский ответ с mitmproxy

from libmproxy.models import HTTPResponse 
from netlib.http import Headers 

def request(context, flow): 
    if flow.request.pretty_url.endswith("example.com/index.php"): 
     resp = HTTPResponse(
      [1, 1], 200, "OK", 
      Headers(Content_Type="text/html"), 
      "<html><body>hello world</body></html>") 
     flow.reply(resp) 

Но результат, как ожидалось, в браузере он показывает с кодами статуса HTTP, заголовки оч тело, как чистый текст

[1,1] 200 OK 
Content-Type: text/html 

<html><body>hello world</body></html> 

, как я могу вернуть его как фактическое «HTTP» ответ так, что хром сделать его как HTML?

ответ

1

не устанавливайте http-версию в качестве примера. Заменить [1, 1] с "HTTP/1.1"

from libmproxy.models import HTTPResponse 
from netlib.http import Headers 

def request(context, flow): 
    if flow.request.pretty_url.endswith("example.com/index.php"): 
     resp = HTTPResponse(
      "HTTP/1.1", 200, "OK", 
      Headers(Content_Type="text/html"), 
      "<html><body>hello world</body></html>") 
     flow.reply(resp) 
1

Вы также можете поймать ответ и редактировать/заменить его.

Использование BeautifulSoup также упрощает работу.

Мое решение было создать HTML-файл replace.html и заменить его с оригинальным ответом:

import mitmproxy 
from bs4 import BeautifulSoup 

def response(flow): 
    if flow.request.pretty_host.endswith("example.com/index.php"): 
     soup.BeautifulSoup(open("replace.html")) 
     flow.response.content = str(soup).encode("utf8")