Intereting Posts
TokenMismatchException в строке VerifyCsrfToken.php 67 на laravel с использованием ajax Cant't Parse Web Pages с PHP Простой HTML DOM Parser Как заставить mysqli исключать исключения с помощью MYSQLI_REPORT_STRICT? Являются ли @imagecreatefromjpeg и imagejpeg () эффективными для предотвращения загрузки пользователями изображений с вредоносным кодом php внутри них? .htaccess перенаправить, если в iframe Как я могу использовать значение переменной как константу? преобразование fgetcsv-ответа в конкретный json Подключение к базе данных с PDO и классом Singleton Могут ли MongoDB и его драйверы сохранить упорядочение элементов документа Получение кода ответа заголовка Как убедиться, что значение сбрасывается в цикле foreach в PHP? Ошибка при написании арабского изображения Обновление долговременной стороны доступа к токен-серверу сервер X возвращает 200 ответов, броски сервера Y и внутреннюю ошибку сервера Аутентификация приложения FACEBOOK – PHP

PHP REST Клиенты

Я пытаюсь подключиться к веб-службе RESTful, но у меня возникают некоторые проблемы, особенно при отправке данных через PUT и DELETE. С помощью cURL PUT требует отправки файла, а DELETE просто странно. Я вполне способен писать клиента с поддержкой поддержки сокетов PHP и писать заголовки HTTP самостоятельно, но я хотел знать, были ли вы, ребята, когда-либо пользовались или видели REST-клиент для PHP?

Таким образом, Zend_Rest_Client не является клиентом REST вообще – он не поддерживает методы PUT и DELETE, например. Попробовав клонировать его в работу с реальным сервисом RESTful, я устал и написал правильный клиент REST для PHP:

http://github.com/educoder/pest

Он все еще не хватает нескольких вещей, но если его подберут, я положу еще немного работы.

Ниже приведен пример использования службы REST OpenStreetMap:

<?php /** * This PestXML usage example pulls data from the OpenStreetMap API. * (see http://wiki.openstreetmap.org/wiki/API_v0.6) **/ require_once 'PestXML.php'; $pest = new PestXML('http://api.openstreetmap.org/api/0.6'); // Retrieve map data for the University of Toronto campus $map = $pest->get('/map?bbox=-79.39997,43.65827,-79.39344,43.66903'); // Print all of the street names in the map $streets = $map->xpath('//way/tag[@k="name"]'); foreach ($streets as $s) { echo $s['v'] . "\n"; } ?> 

В настоящее время он использует curl, но я могу переключить его на HTTP_Request или HTTP_Request2 по строке.

Обновление: Похоже, что на это свалилось немало людей. Pest теперь поддерживает HTTP-аутентификацию и множество других функций благодаря вкладчикам GitHub.

Я написал HTTP-клиент PHP под названием Guzzle. Guzzle – это HTTP-клиент и инфраструктура для создания клиентов веб-сервиса REST. Вы можете найти более подробную информацию о Guzzle на своем веб-сайте или перейти прямо к источнику на github: https://github.com/guzzle/guzzle

Guzzle обеспечивает преимущества, которые предоставляет большинство HTTP-клиентов (более простой интерфейс, все методы HTTP и просмотр запроса / ответа), но также предоставляет другие расширенные функции:

  • потоковые сущности
  • экспоненциальная отсрочка
  • встроенный прокси-сервер для кэширования
  • печенье
  • Ведение журнала
  • управляемые постоянные соединения
  • параллельные запросы
  • OAuth
  • плагиновую архитектуру, которая позволяет реализовать произвольные схемы аутентификации
  • Автогенерация клиентского API из файла описания службы JSON

Единственный недостаток: для него требуется PHP 5.3.3

Я просто использую встроенную поддержку PHP cURL . Параметр CURLOPT_CUSTOMREQUEST позволяет вам делать PUT / DELETE и т. Д.

простой пример в php для остального клиента – обновление приведено ниже:

 <?php $url ="http://example.com"; $data = "The updated text message"; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); //for updating we have to use PUT method. curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); ?> 

простой пример в php для остального клиента – удаление категории = xx приведено ниже:

 <?php $url ="http://example.com/categoryid=xx"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); ?> 

Я долго не мог найти элегантное решение, не любил реализацию cURL, придумал свой собственный. Он поддерживает HTTP-аутентификацию, переадресацию, PUT и т. Д., Потому что он полагается на http-модуль pecl.

Реализация прост и проста, легко расширяется.

Более подробную информацию можно найти здесь:

У меня был хороший успех с Zend Rest Client

Возобновляя тему, я нашел эту библиотеку https://github.com/Respect/Rest/ очень прост в использовании, но примеров в Интернете немного:

  require_once 'bootstrap.php'; require_once 'Respect/Rest/Router.php'; require_once 'Respect/Rest/Request.php'; use Respect\Rest\Router; $router->post('/myApp/', function() { $data_back = json_decode(file_get_contents('php://input')); // var_dump($data_back); return json_encode($data_back); }); $router->get('/myApp/*', function($id = null) { $json = json_encode(MyService::getInstance()->list()); return utf8_encode($json); }); $router->put('/myApp/*', function($id = null) { return 'Update: ' . $id; }); $router->delete('/myApp/*', function($id = null) { return 'Delete: ' . $id; }); 

Недавним прибытием является Zend \ Http \ Client , входящая в Zend Framework 2.

Устанавливается через композитор (хотя, начиная с этой записи, а не через Packagist, по-прежнему нужно использовать репозиторий пользовательских пакетов Zend http://packages.zendframework.com/ ).