PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic WEB разработка *NIX CouchDB Hack Python
Главная Статьи PHP Отправить POST через file_get_contents()
Главная
 Главная  Контакты
 
Программинг
Статьи Книги ЧаВО
 
xBOOKi
Fresh Books Операционки Сети
 
Поиск
-------
 
Counters
Яндекс цитирования
Rambler's Top100
-------
 
CryptDisk.4h
Программа которая позволяет создать виртуальный шифрованный логический диск.

cryptdisk.4hack.com

-------
 
 

Чтобы получить содержимое веб-страницы все с удовольствием используют file_get_contents(), например file_get_contents('http://www.habrahabr.ru/'). Но я уже давно наблюдаю, что, как дело доходит до того, чтобы отправить POST, разработчики используют либо CURL, либо открывают сокеты. Я не считаю, что это плохо или что не надо так делать, просто для решения простых задач можно использовать простые решения.

Я и сам так раньше делал, пока на наткнулся на понятие контекстов потоковых операций в PHP. Контекст позволяет передать дополнительные параметры потоковому обработчику. Для http например, можно сконфигурировать POST-запрос или передать дополнительные заголовки.

file_get_contents() принимает 3 параметром «контекст», который собственно и конфигурирует сам запрос.
Ниже пример такого запроса или RTFM


error_reporting(E_ALL);
require_once 'simpletest/unit_tester.php';
require_once 'simpletest/default_reporter.php';

define('PARAM_NAME',  'var');
define('PARAM_VALUE''testData');
define('QUERY',       'var=testData');

/**
 * Набор тестов
 */
class FileGetContentsTest extends UnitTestCase {

    /**
     * Проверить, что пришел POST
     */
    public function testIsPost() {
        $this->assertEqual('POST', $_SERVER['REQUEST_METHOD'],
            'Expected POST request');
        $this->assertTrue(isset($_POST[PARAM_NAME]) && $_POST[PARAM_NAME] == PARAM_VALUE,
            'Expected POST contains ' . QUERY);
    }
}

/**
 * Отправить POST
 */
if (!$_SERVER['QUERY_STRING']) {

    // Создать контекст и инициализировать POST запрос
    $context = stream_context_create(array(
        'http' => array(
            'method' => 'POST',
            'header' => 'Content-Type: application/x-www-form-urlencoded' . PHP_EOL,
            'content' => QUERY,
        ),
    ));

    // Отправить запрос на себя, чтобы запустить тесты
    // и показать результат выполнения тестов
    echo file_get_contents(
        $file = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}?runTests",
        $use_include_path = false,
        $context);

/**
 * Запустить тесты
 */
} else {
    $suite = new FileGetContentsTest;
    $suite->run(new DefaultReporter());
}



Следуюшие файловые функции принимают контексты:

  • file
  • fopen
  • readfile
  • file_get_contents
  • file_put_contents


Свежее
Резервное копирование rsync-ом
DNS Amplification (DNS усиление)
Алгоритм Шинглов — поиск нечетких дубликатов текста
Metasploit Framework. Обзор
Использование CouchDB
-------



 
Copyright © 2003-2009   Frikazoid.
Rambler's Top100