Http Request — библиотека для простой работы с HTTP протоколом

https://github.com/Garik-/http-request

Очень часто в коде можно встретить такие строки:

$result = file_get_contents("http://geocode-maps.yandex.ru/1.x/?geocode=".urlencode("Москва"));

$handle = fopen("http://www.example.com/", "rb");
$result = fgets($handle);

 

 

  • Не важно человеку, что директива allow_url_fopen может быть отключена на сервере.
  • Не важно, что на сервере установлена библиотека cURL, которая без проблем скачает 100 МБ файл.
  • Не важно, какой ответ вернет сервер, 200, 301, может 404, может 502?
  • Не важно, то что сеть не идеальная среда и ответ может придти частично или его вовсе не будет продолжительное время. Скрипт попросту подвиснет в ожидании на неопределенное время или вернет не корректный результат.

 

try {
    $http = HttpRequest::get("http://geocode-maps.yandex.ru/1.x/?format=json",array("geocode"=>$city))->acceptJson();
    $json = $http->ok() ? json_decode($http->body()) : null;
} catch (HttpRequestException $e) {
    exit($e->getMessage());
}

 
Теперь это действительно не важно.

Библиотека Http Request основана на одноименной библиотеке Kevin Sawicki, которая должна быть хорошо известна Android разработчикам, ведь её использует сам GitHub в своем приложении.

Небольшие примеры

 

Отправка формы методом POST со своими заголовками

 

$http = HttpRequest::post("http://example.com/")->form(
            array(
                "param1" => "value", 
                "param2" => "value", 
                "file" => "@/home/vasya/attach.txt"
                ))
            ->header(HttpRequest::HEADER_USER_AGENT, "Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14912/812; U; ru)")
            ->header(HttpRequest::HEADER_REFERER,"http://google.com");

 

 

Отправка файла методом PUT

 

$http = HttpRequest::put("http://example.com/")->upload("/home/vasja/attach.txt");

 

 

Вывести все заголовки ответа сервера

 

print_r(HttpRequest::head("http://example.com")->headers());

 

 

Загрузка файла с сервера

 

$image=fopen('image.jpg','wb');
$loaded=HttpRequest::get("http://example.com/file.jpg")->receive($image)->ok(); // boolean

 
Библиотека включает в себя всего 3 файла, и может оказаться хорошей альтернативой монструозным фреймворкам для ваших собственных проектов.