Właściwie chcę przeczytać treść, która pojawia się po zapytaniu, kiedy to jest zrobione. Problem polega na tym, że adres URL akceptuje tylko POST
metody i nie podejmuje żadnych działań z GET
metodą ...
Muszę przeczytać całą zawartość za pomocą domdocument
lub file_get_contents()
. Czy jest jakaś metoda, która pozwoli mi przesłać parametry za pomocą POST
metody, a następnie odczytać zawartość za pośrednictwem PHP
?
file_get_contents()
tylko wtedy, gdy włączone są opakowania fopen. Zobacz php.net/manual/en/…file_get_contents()
file_get_contents()
jest częścią jądra PHP. Niepotrzebne użycie rozszerzenia może poszerzyć powierzchnię ataku Twojej aplikacji. Np. Google php curl cveMożesz użyć cURL :
źródło
Korzystam z następującej funkcji, aby wysyłać dane za pomocą curl. $ data to tablica pól do opublikowania (zostanie poprawnie zakodowana przy użyciu http_build_query). Dane są kodowane przy użyciu application / x-www-form-urlencoded.
@Edward wspomina, że http_build_query można pominąć, ponieważ curl poprawnie koduje tablicę przekazaną do parametru CURLOPT_POSTFIELDS, ale należy pamiętać, że w takim przypadku dane będą kodowane przy użyciu danych wieloczęściowych / formularzy.
Używam tej funkcji z interfejsami API, które oczekują kodowania danych za pomocą application / x-www-form-urlencoded. Dlatego używam http_build_query ().
źródło
http_build_query
konwertuje$data
tablicę na ciąg znaków, unikając danych wyjściowych jako danych wieloczęściowych / formularzy.... CURLOPT_RETURNTRANSFER, true
powoduje zawarcie$response
zawartości.file_get_contents
a twoje rozwiązanie wymaga CURL tego, czego wiele osób nie ma. więc twoje rozwiązanie może działa, ale nie odpowiada na pytanie, jak to zrobić za pomocą wbudowanych funkcji plików / strumieni.Polecam używać żłobka z pakietem open source, który jest w pełni testowany jednostkowo i wykorzystuje najnowsze praktyki kodowania.
Instalowanie pyska
Przejdź do wiersza poleceń w folderze projektu i wpisz następujące polecenie (zakładając, że masz już menedżer pakietów kompozytor zainstalowany). Jeśli potrzebujesz pomocy w instalacji Composer, powinieneś zajrzeć tutaj .
Używanie Guzzle do wysłania żądania POST
Korzystanie z Guzzle jest bardzo proste, ponieważ wykorzystuje lekki obiektowy interfejs API:
źródło
Istnieje inna metoda CURL, jeśli idziesz tą drogą.
Jest to dość proste, gdy przyjrzysz się, jak działa rozszerzenie curl PHP, łącząc różne flagi z wywołaniami setopt (). W tym przykładzie mam zmienną $ xml, która zawiera kod XML, który przygotowałem do wysłania - Zamierzam opublikować zawartość tego metody testowej w przykładzie.
Najpierw zainicjowaliśmy połączenie, a następnie ustawiliśmy niektóre opcje za pomocą setopt (). Informują one PHP, że wysyłamy żądanie pocztowe i wysyłamy wraz z nim pewne dane, dostarczając je. Flaga CURLOPT_RETURNTRANSFER informuje curl, aby przekazał nam dane wyjściowe jako wartość zwracaną przez curl_exec, zamiast go wyprowadzać. Następnie wykonujemy połączenie i zamykamy połączenie - wynikiem jest odpowiedź $.
źródło
$ch
nie$curl
, prawda?Jeśli przypadkiem używasz Wordpressa do opracowania aplikacji (jest to w rzeczywistości wygodny sposób na uzyskanie autoryzacji, stron informacyjnych itp. Nawet w przypadku bardzo prostych rzeczy), możesz użyć następującego fragmentu:
Wykorzystuje różne sposoby wykonania rzeczywistego żądania HTTP, w zależności od tego, co jest dostępne na serwerze WWW. Aby uzyskać więcej informacji, zobacz dokumentację interfejsu API HTTP .
Jeśli nie chcesz tworzyć niestandardowego motywu lub wtyczki, aby uruchomić silnik Wordpress, możesz po prostu wykonać następujące czynności w izolowanym pliku PHP w katalogu głównym Wordpress:
Nie pokaże żadnego motywu ani nie wyświetli żadnego HTML, po prostu zhakuj za pomocą API Wordpress!
źródło
Chciałbym dodać kilka przemyśleń na temat opartej na curl odpowiedzi Freda Tanrikuta. Wiem, że większość z nich jest już napisana w powyższych odpowiedziach, ale myślę, że dobrym pomysłem jest pokazanie odpowiedzi obejmującej wszystkie z nich razem.
Oto klasa, którą napisałem, aby wysyłać żądania HTTP-GET / POST / PUT / DELETE na podstawie curl, dotyczące tylko treści odpowiedzi:
Ulepszenia
Przykład użycia
DOSTAĆ
POCZTA
POŁOŻYĆ
USUNĄĆ
Testowanie
Możesz także wykonać kilka fajnych testów serwisowych, korzystając z tej prostej klasy.
źródło
Inną alternatywą powyższej metody bez zwijania się jest użycie natywnych funkcji strumienia :
stream_context_create()
:stream_get_contents()
:Funkcja POST z tymi może być po prostu taka:
źródło
fclose()
jeśli$fp
jestfalse
. Ponieważfclose()
oczekuje, że zasób jest parametrem.Lepszy sposób wysyłania
GET
lub wysyłaniaPOST
zapytańPHP
jest następujący:Kod pochodzi z oficjalnej dokumentacji tutaj http://docs.php.net/manual/da/httprequest.send.php
źródło
Jest jeszcze jeden, z którego możesz skorzystać
Kliknij tutaj po szczegóły
źródło
Szukałem podobnego problemu i znalazłem lepsze podejście do tego. Więc proszę.
Możesz po prostu umieścić następujący wiersz na stronie przekierowania (powiedz page1.php).
Potrzebuję tego, aby przekierować żądania POST dla wywołań interfejsu API REST . To rozwiązanie może przekierowywać dane postu oraz niestandardowe wartości nagłówka.
Oto link referencyjny .
źródło
redirect a page request with POST param
vssend POST request
. Dla mnie cel obu jest taki sam, popraw mnie, jeśli się mylę.Tutaj używa się tylko jednego polecenia bez cURL. Super proste.
źródło
Wypróbuj pakiet PEAR HTTP_Request2 , aby łatwo wysyłać żądania POST. Alternatywnie możesz użyć funkcji curl PHP lub kontekstu strumienia PHP .
HTTP_Request2 umożliwia także wykpienie serwera , dzięki czemu można łatwo przetestować kod jednostkowo
źródło