Я использую функцию PHP file_get_contents()
для извлечения содержимого URL-адреса, а затем обрабатываю заголовки через переменную $http_response_header
.
Теперь проблема в том, что некоторым URL-адресам нужны некоторые данные, которые должны быть отправлены на URL-адрес (например, страницы входа).
Как мне это сделать?
Я понимаю, используя stream_context, я могу это сделать, но я не совсем понятен.
Благодарю.
Отправка HTTP-запроса POST с использованием file_get_contents
не так уж и трудна, на самом деле: как вы уже догадались, вам нужно использовать параметр $context
.
Вот пример, приведенный в руководстве по PHP, на этой странице: параметры контекста HTTP (цитирование) :
$postdata = http_build_query( array( 'var1' => 'some content', 'var2' => 'doh' ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('http://example.com/submit.php', false, $context);
В принципе, вам нужно создать поток с правильными параметрами (есть полный список на этой странице) и использовать его в качестве третьего параметра для file_get_contents
– ничего более 😉
В качестве побочного элемента: вообще говоря, для отправки запросов HTTP POST мы склонны использовать завиток, который предоставляет множество опций все, но потоки – одна из хороших вещей PHP, о которых никто не знает … слишком плохо .. ,
Альтернатива, вы также можете использовать fopen
$params = array('http' => array( 'method' => 'POST', 'content' => 'toto=1&tata=2' )); $ctx = stream_context_create($params); $fp = @fopen($sUrl, 'rb', false, $ctx); if (!$fp) { throw new Exception("Problem with $sUrl, $php_errormsg"); } $response = @stream_get_contents($fp); if ($response === false) { throw new Exception("Problem reading data from $sUrl, $php_errormsg"); }
$sUrl = 'http://www.linktopage.com/login/'; $params = array('http' => array( 'method' => 'POST', 'content' => 'username=admin195&password=d123456789' )); $ctx = stream_context_create($params); $fp = @fopen($sUrl, 'rb', false, $ctx); if (!$fp) { throw new Exception("Problem with $sUrl, $php_errormsg"); } $response = @stream_get_contents($fp); if ($response === false) { throw new Exception("Problem reading data from $sUrl, $php_errormsg"); }