Przesyłanie żądań HTTP za pomocą narzędzi Chrome dla programistów

206

Czy istnieje sposób na wysłanie żądania HTTP za pomocą narzędzi Chrome dla programistów bez użycia wtyczki takiej jak POSTER?

leojh
źródło
1
Czy chcesz składać wnioski między domenami lub w tej samej domenie, w której otworzyłeś narzędzia programistyczne?
Lukas
6
Dla wszystkich osób, które chcą tej funkcji - oznacz to Chromium gwiazdką: code.google.com/p/chromium/issues/…
Ivan Zuzak
1
Wszystkie były użyteczne odpowiedzi, chciałem tylko dodać narzędzie, które uważam za bardzo przydatne Advanced Rest Client . Korzystanie z tego może pomóc zaoszczędzić dużo czasu na dłuższą metę, jeśli zamierzasz wysyłać wiele żądań API.
Sagar Ranglani,
6
Firefox jest lepszą opcją do tego. wystarczy kliknąć prawym przyciskiem myszy żądanie i wysłać ponownie lub edytować i ponownie wysłać.
eusoubrasileiro
@eusoubrasileiro: Dzięki. Przycisk Edytuj i wyślij ponownie na karcie sieci w przeglądarce Firefox, aby ponownie wysłać żądanie, jest naprawdę fajną funkcją. Mam nadzieję, że ktoś
zgłosi

Odpowiedzi:

186

Ponieważ interfejs API Fetch jest obsługiwany przez Chrome (i większość innych przeglądarek), wysyłanie żądań HTTP z konsoli devtools jest teraz dość łatwe.

Aby GET plik JSON, na przykład:

fetch('https://jsonplaceholder.typicode.com/posts/1')
  .then(res => res.json())
  .then(console.log)

Lub POST nowego zasobu:

fetch('https://jsonplaceholder.typicode.com/posts', {
  method: 'POST',
  body: JSON.stringify({
    title: 'foo',
    body: 'bar',
    userId: 1
  }),
  headers: {
    'Content-type': 'application/json; charset=UTF-8'
  }
})
.then(res => res.json())
.then(console.log)

Devtools Chrome faktycznie obsługują także nową składnię asynchroniczną / oczekującą (nawet jeśli normalnie funkcja oczekująca może być używana tylko w funkcji asynchronicznej):

const response = await fetch('https://jsonplaceholder.typicode.com/posts/1')
console.log(await response.json())

Zauważ, że twoje żądania będą podlegały zasadom tego samego pochodzenia , tak jak każde inne żądanie HTTP w przeglądarce, więc albo unikaj żądań krzyżowych lub upewnij się, że serwer ustawia nagłówki CORS, które zezwalają na twoje żądanie.

Korzystanie z wtyczki (stara odpowiedź)

Jako dodatek do wcześniej opublikowanych sugestii zauważyłem, że wtyczka Postman do Chrome działa bardzo dobrze. Pozwala ustawić nagłówki i parametry URL, używać uwierzytelniania HTTP, zapisywać często wykonywane żądania i tak dalej.

Christofer Eliasson
źródło
3
Ponieważ operacja zaakceptowała odpowiedź za pomocą Listonosza: Jeśli klikniesz prawym przyciskiem myszy żądanie w narzędziach programistycznych i „Kopiuj jako cURL”, możesz następnie zaimportować polecenie cURL do Postmana, aby ponownie wysłać / zmienić żądanie. Zobacz: getpostman.com/docs/postman/collections/data_formats -> „Importowanie jako cURL”
dhfsk
1
Jak złożyć wniosek o wpis?
Nuhman,
7
@Nuhman Fetch bierze drugi argument, w którym można skonfigurować żądaniefetch("/echo/json/", { method: "POST", body: data })
Christofer Eliasson
1
Pamiętaj, że można również skopiować jako pobranie dowolnego żądania z historii sieci Chrome Dev Tools.
Vadzim
1
@mathtick Jest modeopcja kupna można użyć: fetch("/echo/json/", { method: 'POST', mode: 'no-cors' }. Zauważ, że tryb: „no-cors” zezwala tylko na ograniczony zestaw nagłówków w żądaniu. Więcej informacji o korzystaniu z funkcji pobierania i no-cors
Christofer Eliasson
154

Jeśli chcesz edytować i ponownie wysłać żądanie przechwycone na karcie Sieć Narzędzi programistów Chrome:

  • Kliknij Nameżądanie prawym przyciskiem myszy
  • Wybierz Copy > Copy as cURL
  • Wklej do wiersza poleceń (polecenie zawiera pliki cookie i nagłówki)
  • Edytuj żądanie w razie potrzeby i uruchom

wprowadź opis zdjęcia tutaj

morela
źródło
11
Firefox pozwala edytować rozmowę przed powtórzeniem, ale nie ma takiej opcji w chrome, więc nad odpowiedzią jest droga
Tofeeq
3
W przypadku Chrome 63+ wklejanie CURL w konsoli nie działa.
Ravi Parekh
2
@RaviParekh Nie sądzę, że miał na myśli konsolę Chrome, miał na myśli wiersz poleceń systemu operacyjnego
Korayem,
4
Kopiuj jako pobieranie pozwala ponownie wystawiać zmienione żądania bezpośrednio z konsoli Chrome Dev Tools i jest realną alternatywą dla tych, którzy nie mają cURL lub nie chcą się tym przejmować.
Vadzim
1
Ale używając curl, czasami wynik nie jest taki sam. Przybyłem tutaj, aby wiedzieć, czy mogę poprosić o przeglądarkę. Korzystanie z javascript przeglądarki. Pozwala mi odtwarzać problemy CORS, czego nie powinien oświecić zwinięcie z mojego terminala.
Garry Dias,
32

Wiem, stary post ... ale zostawienie tego tutaj może być pomocne.

Nowoczesne przeglądarki obsługują teraz interfejs API Fetch .

Możesz użyć tego w następujący sposób:

fetch("<url>")
    .then(data => data.json()) // could be .text() or .blob() depending on the data you are expecting
    .then(console.log); // print your data

ps: Wykona wszystkie kontrole CORS, ponieważ jest to poprawione XmlHttpRequest.

tomblue
źródło
13

Jeśli twoja strona zawiera jquery na twojej stronie, możesz to zrobić pisząc na konsoli programistów chrome:

$.get(
    "somepage.php",
    {paramOne : 1, paramX : 'abc'},
    function(data) {
       alert('page content: ' + data);
    }
);

Jego jquery to zrobić!

sadaf2605
źródło
14
Zakłada się, że strona internetowa użyje jQuery
mikemaccana
2
Pamiętaj, że jest to tylko w przypadku GETwniosków, jeśli chcesz robić inne rodzaje wniosków, możesz skorzystać z$.ajax
aksu 16.04.16
@mikemaccana Możesz załadować jQuery na dowolną stronę za pomocą konsoli.
nehem
1
W ten sposóbvar script = document.createElement("script"); script.src = "http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"; document.body.appendChild(script);
nehem
1
Odpowiedź @itsneo była na miejscu! Sposób wczytywania jquery, jeśli strona, do której uzyskiwany jest dostęp, jeszcze jej nie ma. Następnie możesz użyć $ .ajax lub ekwiwalentu bez potrzeby używania wtyczki
Renato Chencinski
12

Rozwijanie odpowiedzi @dhfsk

Oto mój przepływ pracy

  1. W Chrome DevTools kliknij prawym przyciskiem myszy żądanie, którym chcesz manipulować> Copy as cURL Chrome DevTools Kopiuj jako cURL

  2. Otwórz listonosza

  3. Kliknij Importw lewym górnym roguPaste Raw Text Listonosz Wklej surowy tekst cURL z Chrome
Korayem
źródło
7

Jeśli chcesz wykonać test POST z tej samej domeny, zawsze możesz wstawić formularz do DOM przy użyciu narzędzi programistycznych i przesłać:

Wstawiony formularz do dokumentu

Craig Curtis
źródło
4

Miałem największe szczęście, łącząc dwie powyższe odpowiedzi. Przejdź do witryny w Chrome, a następnie znajdź żądanie na karcie Sieć w DevTools. Kliknij prawym przyciskiem myszy żądanie i Kopiuj, ale Kopiuj jako pobieranie zamiast cURL. Możesz wkleić kod pobierania bezpośrednio do konsoli DevTools i edytować go, zamiast używać wiersza poleceń.

Aaron Parke
źródło
3
Nie traktuj ich jako „dwóch odpowiedzi powyżej”, ponieważ może to ulec zmianie podczas głosowania w górę / w dół
Urosh T.
4

Aby uzyskać żądania z nagłówkami, użyj tego formatu.

   fetch('http://example.com', {
      method: 'GET',
      headers: new Headers({
               'Content-Type': 'application/json',
               'someheader': 'headervalue'
               })
    })
    .then(res => res.json())
    .then(console.log)
Nirojan Selvanathan
źródło
2

jeśli używasz jquery na swojej stronie internetowej, możesz użyć czegoś takiego do konsoli

$.post(
    'dom/data-home.php',
    {
    type : "home", id : "0"
    },function(data){
        console.log(data)
    })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

Nazor
źródło
1

Upraszczając, jeśli chcesz, aby żądanie korzystało z tego samego kontekstu przeglądania, co strona, na którą już patrzysz, w konsoli Chrome po prostu wykonaj:

window.location="https://www.example.com";
Dave Potts
źródło
1

$.post(
    'dom/data-home.php',
    {
    type : "home", id : "0"
    },function(data){
        console.log(data)
    })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

Fady Sadakah
źródło
1
Powinieneś wyjaśnić swoją odpowiedź, a nie tylko opublikować losowy kod.
Jakub Muda,