Czy ktoś może mi pokazać, jak zrobić curl php z POST HTTP?
Chcę wysłać takie dane:
username=user1, password=passuser1, gender=1
Do www.domain.com
Oczekuję, że curl zwróci odpowiedź jak result=OK
. Czy są jakieś przykłady?
<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2&postvar3=value3");
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
// Further processing ...
if ($server_output == "OK") { ... } else { ... }
?>
http_build_query()
do obsługi parametrów; wystarczy przekazać tablicę, abyCURLOPT_POSTFIELDS
wystarczy.CURLOPT_POSTFIELDS
jest tablica,Content-Type
nagłówek zostanie ustawiony namultipart/form-data
zamiastapplication/x-www-form-urlencoded
. php.net/manual/en/function.curl-setopt.phptrue
zamiast1
dlaCURLOPT_POST
.Proceduralny
Obiektowy
Stosowanie
Uwaga dodatkowa: najlepiej byłoby stworzyć interfejs wywoływany
AdapterInterface
na przykładgetResponse()
metodą i pozwolić, aby klasa powyżej go zaimplementowała. Następnie zawsze możesz zamienić tę implementację na inny podobny adapter, bez żadnych skutków ubocznych dla twojej aplikacji.Korzystanie z HTTPS / szyfrowanie ruchu
Zwykle występuje problem z cURL w PHP w systemie operacyjnym Windows. Podczas próby połączenia się z punktem końcowym chronionym https, pojawi się komunikat o błędzie
certificate verify failed
.Większość ludzi robi tutaj, aby powiedzieć bibliotece cURL, aby po prostu zignorowała błędy certyfikatu i kontynuowała (
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Dzięki temu Twój kod będzie działał, wprowadzasz ogromną lukę w zabezpieczeniach i umożliwiasz złośliwym użytkownikom przeprowadzanie różnych ataków na Twoją aplikację, takich jak atak Man In The Middle lub podobny .Nigdy, nigdy tego nie rób. Zamiast tego wystarczy zmodyfikować
php.ini
swójCA Certificate
plik i poinformować PHP, gdzie plik ma umożliwić poprawną weryfikację certyfikatów:Najnowsze
cacert.pem
można pobrać z Internetu lub wyodrębnić z ulubionej przeglądarki . Podczas zmianyphp.ini
powiązanych ustawień pamiętaj o ponownym uruchomieniu serwera.źródło
Żywy przykład użycia php curl_exec do zrobienia postu HTTP:
Umieść to w pliku o nazwie foobar.php:
Następnie uruchom go za pomocą polecenia
php foobar.php
, zrzuca ten rodzaj danych wyjściowych do ekranu:Więc zrobiłeś POST PHP na www.google.com i wysłałeś mu trochę danych.
Gdyby serwer został zaprogramowany do odczytu zmiennych końcowych, mógłby na tej podstawie zdecydować się zrobić coś innego.
źródło
$postvars .= $key . $value;
powinien$postvars .= $key . $value ."&";
czy nie?$fields
tablicę, a wyświetli ciąg zapytania.curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
http_build_query
:curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
Można to łatwo osiągnąć za pomocą:
źródło
Curl Post + obsługa błędów + ustawianie nagłówków [dzięki @ mantas-d]:
źródło
źródło
curl_close
wewnątrzfinally
bloku.Jeśli formularz używa przekierowań, uwierzytelniania, plików cookie, SSL (https) lub czegokolwiek innego niż całkowicie otwarty skrypt oczekujący zmiennych POST, zaczniesz naprawdę zgrzytać zębami. Spójrz na Snoopy , który robi dokładnie to, co masz na myśli, jednocześnie eliminując konieczność ustawiania dużej części kosztów ogólnych.
źródło
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Prostszą odpowiedzią JEŚLI przekazujesz informacje do swojej witryny, jest użycie zmiennej SESSION. Rozpocznij stronę php:
Jeśli w którymś momencie są informacje, które chcesz wygenerować w PHP i przejść do następnej strony w sesji, zamiast używać zmiennej POST, przypisz ją do zmiennej SESSION. Przykład:
Następnie na następnej stronie po prostu odwołujesz się do tej zmiennej SESSION. UWAGA: po użyciu upewnij się, że go zniszczyłeś, więc nie będzie się utrzymywał po użyciu:
źródło
Oto kod przykładowy dla PHP + curl http://www.webbotsspidersscreenscrapers.com/DSP_download.php
uwzględnienie w tych bibliotekach uprości rozwój
źródło
Jeśli spróbujesz zalogować się na stronie za pomocą plików cookie.
Ten kod:
Może nie działać, jeśli spróbujesz się zalogować, ponieważ wiele witryn zwraca status 200, ale post nie powiódł się.
Łatwym sposobem sprawdzenia, czy logowanie się powiodło, jest sprawdzenie, czy ponownie ustawia pliki cookie. Jeśli na wyjściu ma ciąg Set-Cookies, oznacza to, że posty nie powiodły się i rozpoczyna nową sesję.
Również post może się powieść, ale zamiast tego można przekierować status 200.
Aby upewnić się, że post się powiódł, spróbuj:
Śledź lokalizację za postem, aby przejść do strony, na której post przekierowuje:
A następnie sprawdź, czy w żądaniu istnieją nowe pliki cookie:
źródło
Przykłady przesyłania formularza i surowych danych:
źródło