Edytować i odtwarzać ponownie XHR Chrome / Firefox itp.?

144

Szukałem sposobu na zmianę żądania XHR wysłanego w mojej przeglądarce, a następnie ponowne odtworzenie. Powiedzmy, że w przeglądarce zostało wykonane pełne żądanie POST, a jedyną rzeczą, którą chcę zmienić, jest mała wartość, a następnie odtworzenie jej ponownie. Byłoby to o wiele łatwiejsze i szybsze do zrobienia bezpośrednio w przeglądarce.

Wyszukałem trochę w Google i nie znalazłem sposobu, aby to zrobić w Chrome lub Firefox. Czy można to zrobić w jednej z tych przeglądarek, a może w innej?

madsobel
źródło
Jeśli wylądujesz tutaj po zorientowaniu się, że „Replay XHR” nie działa w Chrome, pamiętaj, że w przypadkach z OPTIONSżądaniami preflight ( ) musisz kliknąć „replay” w żądaniu preflight - a nie w rzeczywistym żądaniu końcowym.
Janaka Bandara

Odpowiedzi:

180

Chrome:

  • W panelu Sieć narzędzi devtools kliknij prawym przyciskiem myszy i wybierz opcję Kopiuj jako cURL
  • Wklej / edytuj żądanie, a następnie wyślij je z terminala, zakładając, że masz curlpolecenie

Zobacz zdjęcie:

wprowadź opis obrazu tutaj

Ewentualnie, w przypadku konieczności wysłania żądania w kontekście strony internetowej , wybierz „Kopiuj jako pobranie” i edytuj-wyślij zawartość z panelu konsoli javascript.


Firefox:

Firefox umożliwia edycję i ponowne wysyłanie XHR bezpośrednio z panelu Sieć. Poniższe zdjęcie pochodzi z przeglądarki Firefox 36:

wprowadź opis obrazu tutaj

Michael P. Bazos
źródło
To może być właśnie to, czego szukam. Wiedziałem, że mogę skopiować wywołanie cURL, ale nie mogłem uruchomić tego bezpośrednio z mojego terminala, ponieważ zostałbym uwierzytelniony. Ale jeśli terminal jest wbudowany bezpośrednio w Chorme, zakładam, że połączenie jest wykonywane „z” przeglądarki. Jeśli tak, to powinno to przypieczętować umowę.
madsobel
14
Dodałem informacje o Firefoksie w odpowiedzi
Michael P. Bazos
Mała sztuczka: jeśli chcesz zobaczyć wyjście cURL w przeglądarce, uruchom je w CLI w ten sposób, curl ... > preview.htmla następnie otwórz plik w przeglądarce.
afilina
@afilina, aby jeszcze bardziej zautomatyzować ten proces, możesz dodać && open preview.htmlna macOS, a plik zostanie otwarty bezpośrednio po żądaniu
CodeBrauer
2
W tym przypadku Firefox radzi sobie zdecydowanie lepiej!
jpenna
41

Chrome ma teraz Copy as fetch w wersji 67:

Skopiuj jako pobranie

Kliknij prawym przyciskiem myszy żądanie sieciowe, a następnie wybierz opcję Kopiuj> Kopiuj jako pobieranie, aby skopiować fetch()kod -równoważny dla tego żądania do schowka.

https://developers.google.com/web/updates/2018/04/devtools#fetch

Przykładowe dane wyjściowe:

fetch("https://stackoverflow.com/posts/validate-body", {
  credentials: "include",
  headers: {},
  referrer: "https://stackoverflow.com/",
  referrerPolicy: "origin",
  body:
    "body=Chrome+now+has+_Copy+as+fetch_+in+version+67%3A%0A%0A%3E+Copy+as+fetch%0ARight-click+a+network+request+then+select+**Copy+%3E+Copy+As+Fetch**+to+copy+the+%60fetch()%60-equivalent+code+for+that+request+to+your+clipboard.%0A%0A&oldBody=&isQuestion=false",
  method: "POST",
  mode: "cors"
});

Różnica polega na tym, że Kopiuj jako cURL będzie zawierać również wszystkie nagłówki żądań (takie jak Cookie i Accept) i nadaje się do ponownego odtwarzania żądania poza Chrome. fetch()Kod jest odpowiedni dla odtwarzając wewnątrz tej samej przeglądarce.

Josh Lee
źródło
6
Dziękuję Ci za to. Dla każdego, kto się zastanawia - możesz po prostu wkleić fetchpolecenie bezpośrednio w konsoli Chrome i powtórzyć żądanie.
Eric Kigathi
7
Możesz użyć następującego polecenia po pobraniu, aby rozwiązać obietnicę zwróconą przez pobranie i wyświetlenie treści odpowiedzi (zakładając, że jest to JSON).then(r => r.json()).then(json => console.log(json))
zgodne z POSIX
1
@Josh Lee, myślę, że wskazówki zgodne z POSIX były dobre i można je dodać do tej odpowiedzi.
Nabi KAZ
@ Dobre wskazówki zgodne z POSIX, czy jest jakieś mniejsze polecenie, o którym mógłbym pamiętać ?!
Nabi KAZ
Dla tych, którzy zastanawiają się, gdzie wkleić kod pobierania: wklej go i zmodyfikuj na konsoli
dotista2008
20

Moje dwie sugestie:

  1. Wtyczka Postman do Chrome + wtyczka Postman Interceptor . Więcej informacji: Listonosz przechwytuje dokumenty żądań

  2. Jeśli korzystasz z systemu Windows, opcją jest Telerik Fiddler. Ma opcję kompozytora do odtwarzania żądań http i jest bezpłatna.

zszep
źródło
8
Odkąd zacząłem używać Postman + rozszerzenie do Chrome Interceptor, nie potrzebowałem Fiddlera.
Threadster
3
Aplikacja FYI Postman dla Chrome jest teraz przestarzała, a jej skonfigurowanie w wersji samodzielnej jest nieco trudniejsze
yefrem
dzięki dużo tylko tego, czego szukałem!
Mohammad
15

Aktualizacja / uzupełnianie odpowiedzi zszep :

Po skopiowaniu żądania jako cUrl (bash), po prostu zaimportuj je do aplikacji Postman :

wprowadź opis obrazu tutaj

jgpATs2w
źródło
4

W przypadku przeglądarki Firefox problem sam się rozwiązał. Posiada zaimplementowaną funkcję „Edytuj i wyślij ponownie”.

Wydaje się, że rozszerzenie Chrome Tamper załatwia sprawę.

Jari Turkia
źródło
Który nie jest już aktualizowany i ma raczej złe recenzje. Najlepszą alternatywą jest użycie Firefoksa do tego rodzaju pracy imo.
T3rm1
Tak. Sytuacja ponownego wysłania wydaje się zmieniać dość szybko. Teraz Chrome ma żądania ponownego wysłania do XHR, ale nie pozwala na edycję.
Jari Turkia
uważaj na przeglądarkę Firefox w wersji 76, która wydaje się mieć problem z tokenem CSRF w plikach cookie podczas edycji i ponownego wysyłania. Próbowałem z wersją 37, działało dobrze, ale z wersją 76 ma problem z walidacją tokenu CSRF.
puppyceceyoyo
1

Minęło 5 lat i twórcy Chrome nie zignorowali tego podstawowego wymagania.
Chociaż nie oferują żadnej metody edycji danych, jak w Firefoksie, oferują pełną powtórkę XHR.
Pozwala to na debugowanie wywołań ajax. „Replay XHR” powtórzy całą transmisję.
wprowadź opis obrazu tutaj

Jan
źródło
0

Jest na to kilka sposobów, jak wspomniano powyżej, ale z mojego doświadczenia wynika, że ​​najlepszym sposobem na manipulowanie żądaniem XHR i ponowne wysłanie jest użycie narzędzi chrome dla programistów do skopiowania żądania jako żądania cURL (kliknij prawym przyciskiem myszy żądanie na karcie sieciowej ) i po prostu zaimportować do aplikacji Postman (gigantyczny przycisk importu w lewym górnym rogu).

quinlo
źródło
0

Nie ma potrzeby instalowania rozszerzeń innych firm!

Istnieje fragment kodu javascript , który można dodać jako zakładkę przeglądarki, a następnie aktywować w dowolnej witrynie, aby śledzić i modyfikować żądania. To wygląda jak:

wprowadź opis obrazu tutaj

Aby uzyskać dalsze instrukcje, przejrzyj stronę github.

T.Todua
źródło