Может кто-нибудь показать мне, как сделать php curl с HTTP POST?
Я хочу отправить данные так:
username=user1, password=passuser1, gender=1
к www.domain.com
Я ожидаю, что локон возвратит ответ как result=OK
. Есть ли примеры?
<?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()
для обработки параметров; достаточно просто передать массив вCURLOPT_POSTFIELDS
.CURLOPT_POSTFIELDS
является массивом,Content-Type
заголовок будет установленmultipart/form-data
вместоapplication/x-www-form-urlencoded
. php.net/manual/en/function.curl-setopt.phptrue
вместо1
дляCURLOPT_POST
.процедурный
Объектно-ориентированный
Применение
Заметьте здесь: лучше было бы создать некоторый интерфейс, вызываемый,
AdapterInterface
например, сgetResponse()
методом, и позволить классу выше реализовать его. Затем вы всегда можете поменять эту реализацию с другим адаптером по вашему вкусу, без каких-либо побочных эффектов для вашего приложения.Использование HTTPS / шифрование трафика
Обычно есть проблема с cURL в PHP под операционной системой Windows. При попытке подключения к защищенной https конечной точке вы получите сообщение об ошибке
certificate verify failed
.Здесь большинство людей говорят библиотеке cURL просто игнорировать ошибки сертификата и продолжить (
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Поскольку это заставит ваш код работать, вы создадите огромную дыру в безопасности и дадите злоумышленникам возможность выполнять различные атаки на ваше приложение, например, Man In The Middle. атака или тому подобное.Никогда, никогда не делай этого. Вместо этого вам просто нужно изменить свой
php.ini
и сообщить PHP, где находится вашCA Certificate
файл, чтобы он мог правильно проверять сертификаты:Последние
cacert.pem
могут быть загружены из Интернета или извлечены из вашего любимого браузера . При изменении любыхphp.ini
связанных настроек не забудьте перезапустить ваш веб-сервер.источник
Пример использования php curl_exec для создания HTTP-сообщения:
Поместите это в файл с именем foobar.php:
Затем запустите его с помощью команды
php foobar.php
, он выведет этот вид вывода на экран:Итак, вы сделали PHP POST на www.google.com и отправили ему некоторые данные.
Если бы сервер был запрограммирован на чтение в переменных записи, он мог бы решить сделать что-то другое, основываясь на этом.
источник
$postvars .= $key . $value;
должен$postvars .= $key . $value ."&";
или нет?$fields
массив, и он выведет строку запроса.curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
http_build_query
как:curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
Это может быть легко достигнуто с помощью:
источник
Сообщение Curl + Обработка ошибок + Установка заголовков [спасибо @ mantas-d]:
источник
источник
curl_close
внутриfinally
блока.Если форма использует перенаправления, аутентификацию, файлы cookie, SSL (https) или что-то еще, кроме полностью открытого скрипта, ожидающего переменные POST, вы начнете очень быстро скрежетать зубами. Взгляните на Snoopy , который делает именно то, что вы имеете в виду, устраняя необходимость в настройке большого количества накладных расходов.
источник
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Более простой ответ, если вы передаете информацию на свой сайт, - это использовать переменную SESSION. Начните php-страницу с:
Если в какой-то момент есть информация, которую вы хотите сгенерировать в PHP и перейти на следующую страницу в сеансе, вместо использования переменной POST, присвойте ее переменной SESSION. Пример:
Затем на следующей странице вы просто ссылаетесь на эту переменную SESSION. ПРИМЕЧАНИЕ: после использования убедитесь, что вы уничтожили его, чтобы он не сохранялся после его использования:
источник
Вот примерный код для PHP + curl http://www.webbotsspidersscreenscrapers.com/DSP_download.php
включение в эти библиотеки упростит разработку
источник
Если вы попытаетесь войти на сайт с помощью куки.
Этот код:
Может не работать, если вы попытаетесь войти в систему, потому что многие сайты возвращают статус 200, но сообщение не успешно.
Простой способ проверить, успешна ли запись для входа в систему, - проверить, не устанавливает ли она файлы cookie снова. Если в выводе есть строка Set-Cookies, это означает, что сообщения не успешны, и начинается новый сеанс.
Также сообщение может быть успешным, но статус может быть перенаправлен вместо 200.
Чтобы убедиться, что сообщение успешно, попробуйте это:
Следуйте за местоположением после сообщения, так что оно перейдет на страницу, на которую оно будет перенаправлено:
И затем проверьте, существуют ли новые куки в запросе:
источник
Примеры отправки формы и необработанных данных:
источник