Как использовать Fiddler для изменения кода состояния в ответе HTTP? - PullRequest
43 голосов
/ 10 мая 2011

Мне нужно протестировать некоторый код клиентского приложения, который я написал, чтобы проверить его обработку различных кодов состояния, возвращаемых в ответе HTTP от веб-сервера.

У меня установлен Fiddler 2 (Web Debugging Proxy), и я считаю, что есть способ изменить ответы с помощью этого приложения, но я изо всех сил пытаюсь выяснить, как это сделать. Это был бы наиболее удобный способ, так как он позволил бы мне оставить и клиентский, и серверный код без изменений.

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

Любой совет будет высоко ценится.

Ответы [ 3 ]

72 голосов
/ 13 мая 2011

Хорошо, я предполагаю, что вы уже можете отслеживать трафик вашего клиента / сервера.То, что вы хотите сделать, это установить точку останова для ответа, а затем поиграть с ним перед отправкой клиенту.

Вот несколько способов сделать это:

  1. Правила> Автоматические точки останова> После ответов
  2. В поле quickexec (черный ящик внизу) введите «bpafter yourpage.svc».Теперь Fiddler остановится на точке останова, прежде чем все запросы к любому URL, который содержит «yourpage.svc».Введите «bpafter» без параметров, чтобы очистить точку останова.
  3. Программно подделать ответ, используя FiddlerScript.Лучшая документация для FiddlerScript находится на официальном сайте: http://www.fiddler2.com/Fiddler/dev/

После того как ответ остановлен в точке останова, просто дважды щелкните его, чтобы открыть его в инспекторах.Теперь у вас есть несколько вариантов:

  1. Рядом с зеленой кнопкой «Выполнить до завершения» (которую вы нажимаете, чтобы отправить ответ) есть раскрывающийся список, позволяющий выбрать некоторые типы ответов по умолчанию.
  2. Или в инспекторе заголовков измените код ответа и сообщение в текстовом поле вверху.
  3. Или щелкните инспектор «Необработанный» и возьмите необработанный ответ, чтобы выполнить произвольные действия дляЭто.Также это хороший способ узнать, что делает ваш клиент, когда получает неверный ответ, который вы, вероятно, будете проверять случайно:)
8 голосов
/ 28 марта 2017

Другой альтернативой является использование вкладки Fiddler AutoResponder (на правой панели). Это позволяет перехватить запрос к любому URI, который соответствует строке, и обработать «постоянный» ответ из файла. Файл может содержать как заголовки, так и полезные данные. Преимущество этого подхода состоит в том, что вам не нужно писать FiddlerScript и вам не нужно обрабатывать каждый запрос вручную через точку останова.

Вы бы настроили правило в Fiddler, как показано ниже (убедитесь, что вы включаете непропорциональные запросы при прохождении , в противном случае все остальные запросы http завершатся неудачно).

Fiddler autoresponder setup В этом примере любой запрос, URI которого включает «fooBar», получит постоянный ответ. Формат файла будет варьироваться в зависимости от ваших API (вы можете использовать свой браузер для перехвата «реального» ответа и основывать его на этом), но мой выглядел следующим образом:

HTTP/1.1 409 Conflict
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, PATCH, OPTIONS
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization
Access-Control-Max-Age: 86400
Content-Type: application/vnd.api+json
Content-Length: 149
Date: Tue, 28 Mar 2017 10:03:29 GMT

{"errors":[{"code":"OutOfStock","detail":"Item not in stock","source":{"lineId":{"type":"Order line Number","id":"1"}},"meta":{"availableStock":0}}]}

Я обнаружил, что требуется возврат каретки в конце последней строки (т. Е. После json) и что заголовок Content-Length должен совпадать с количеством символов в json, иначе веб-приложение зависнет. Ваш пробег может отличаться.

0 голосов
/ 15 июня 2018

Создать правило FiddlerScript. Вот что я использовал для создания локальной копии веб-сайта, который намеренно использовал 403 на каждой странице, чтобы помешать HTTrack / WGET. https://gist.github.com/JamoCA/22db8d68a9a2fb20cb04a85360185333

/* 20180615 Fiddler rule to ignore all 403 HTTP Status errors so WGET or HTTrack can generate local copy of remote website */
   SCENARIO: Changing the user agent or setting a delay isn't enough and the entire remote server is configured to respond w/403.
   CONFIGURE: Add below rule to FiddlerScript OnBeforeReponse() section.  Configure HTTrack/WGET/CRON to use proxy 127.0.0.01:8888 */

static function OnBeforeResponse(oSession: Session) {
  if (oSession.HostnameIs("TARGETHOSTNAME_FILTER.com") && oSession.responseCode == 403) {
    oSession.responseCode = 200;
    oSession.oResponse.headers.HTTPResponseCode = 200;
    oSession.oResponse.headers.HTTPResponseStatus = "200 OK";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...