¿Cómo utilizo Fiddler para modificar el código de estado en una respuesta HTTP?
httpresponse http-status-codes (3)
Crea una regla de FiddlerScript. Esto es lo que utilicé para generar una copia local de un sitio web que usaba intencionalmente 403 en cada página para frustrar 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";
}
}
Necesito probar algún código de aplicación cliente que he escrito para probar su ''manejo de varios códigos de estado devueltos en una respuesta HTTP desde un servidor web.
Tengo Fiddler 2 (Web Debugging Proxy) instalado y creo que hay una manera de modificar las respuestas usando esta aplicación, pero estoy luchando por descubrir cómo hacerlo. Esta sería la forma más conveniente, ya que me permitiría dejar el código del cliente y del servidor sin modificaciones.
¿Alguien puede ayudar ya que me gustaría interceptar la respuesta HTTP que se envía del servidor al cliente y modificar el código de estado antes de que llegue al cliente?
Cualquier consejo sería muy apreciado.
Ok, entonces supongo que ya puedes monitorear el tráfico de tu cliente / servidor. Lo que quiere hacer es establecer un punto de interrupción en la respuesta y luego manipularlo antes de enviarlo al cliente.
Aquí hay un par de maneras diferentes de hacerlo:
- Reglas> Puntos de interrupción automáticos> Después de las respuestas
- En el cuadro de quickexec (el cuadro negro en la parte inferior), escriba "bpafter yourpage.svc". Ahora Fiddler se detendrá en un punto de interrupción antes de todas las solicitudes a cualquier URL que contenga "yourpage.svc". Escriba "bpafter" sin parámetros para borrar el punto de interrupción.
- Modifica programáticamente la respuesta utilizando FiddlerScript. La mejor documentación para FiddlerScript está en el sitio oficial: http://www.fiddler2.com/Fiddler/dev/
Una vez que haya detenido una respuesta en el punto de interrupción, simplemente haga doble clic para abrirla en los inspectores. Tienes un par de opciones ahora:
- Justo al lado del botón verde Ejecutar hasta la finalización (en el que haces clic para enviar la respuesta) hay un menú desplegable que te permite elegir algunos tipos de respuesta predeterminados.
- O bien, en el inspector de encabezados, cambie el código de respuesta y el mensaje en el cuadro de texto en la parte superior.
- O bien, haga clic en el inspector "Crudo" y juegue con la respuesta sin formato para hacer cosas arbitrarias. También es una buena forma de ver lo que hace su cliente cuando obtiene una respuesta mal formada, que probablemente probará accidentalmente :)
Otra alternativa es usar la pestaña AutoResponder de Fiddler (en el panel de la derecha). Esto le permite capturar una solicitud a cualquier URI que coincida con una cadena y que sirva una respuesta "enlatada" desde un archivo. El archivo puede contener tanto encabezados como carga útil. La ventaja de este enfoque es que no tiene que escribir FiddlerScript y no tiene que manejar cada solicitud manualmente a través de un punto de interrupción.
Debería establecer la regla en Fiddler como se muestra a continuación (asegúrese de habilitar el envío de solicitudes no coincidentes, de lo contrario fallarán todas las demás solicitudes http).
En este ejemplo, cualquier solicitud cuyo URI incluya "fooBar" obtendrá la respuesta enlatada. El formato del archivo variará según sus API (puede usar su navegador para interceptar una respuesta "real" y basarlo en eso) pero el mío se veía como el siguiente:
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}}]}
Descubrí que necesitaba un retorno de carro al final de la última línea (es decir, después del json) y que el encabezado Content-Length tenía que coincidir con el número de caracteres en el json, de lo contrario, la aplicación se bloqueaba. Su experiencia puede ser diferente.