Classe PHP Client. A classe Zend\Http\Client fornece uma interface para realizar pedidos HTTP.

Documentos relacionados
Aplicação Web Zend Framework 2 Cliente de Aplicação Asp.Net Web API

Coletando dados utilizando a API do Zabbix com PHP e JSON

Plataforma Dados Saúde. WebAPI

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Admin Docs Documentation

Desenvolvimento de Aplicações para Internet Aula 11

Criando e consumindo Web service REST com PHP e JSON. Palestrante: Weiberlan Garcia

Redes de Computadores e Aplicações Camada de aplicação IGOR ALVES

Curso de PHP. FATEC - Jundiaí TIPOS DE VARIÁVEIS

AJAX. Aula 01 - Introdução

Integração REST Text2Speech Versão 1.1

Ajax Asynchronous JavaScript and Xml

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha

Ajax Asynchronous JavaScript and Xml

PHP: Cookies e Sessões

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

Introdução ao PHP. Prof. Késsia Marchi

Aula 04 Manipulação e Tipos de Dados em PHP. Prof. Pedro Baesse

PROGRAMAÇÃO PARA INTERNET. Fonte: Raul Paradeda

Linguagem de Programação III Aula 2 Revisão Parte II

PHP e MySQL Autenticação de Usuários

Criação de uma aplicação Web ASP.NET MVC 4

Programação web Prof. Wladimir

Redes de Computadores

O que é uma sessão. maneira de preservar dados através de acessos subsequentes.

API DE INTEGRAÇÃO VERSÃO 2. Janeiro/2017. Manual de Integração. Setor de Desenvolvimento

Lista de Revisão. 3. Analise a afirmativa a seguir como verdadeira ou falsa e justifique.

PHP. Hypertext Pre-Processor

Escrever scripts de PHP com HTML

Manual Direct100 API V2 RICCARDO BARANA

PHP (PHP Hypertext Preprocessor)

Introdução 20 Diagramas de fluxos de dados 20 O processo de elaboração de DFD 22 Regras práticas para a elaboração de DFD 24 Dicionário de dados 26

22/05/2012 CRIANDO UM PROJETO COM TELAS ESTRUTURA DA APLICAÇÃO LOGIN BANCO DE DADOS TAREFAS PHP MYSQL PARTE 2

Prof. Esp. Andrew Rodrigues 1

EA975 - Laboratório de Engenharia de Software

Principais conceitos de CORBA

IEC Banco de Dados I Aula 11 Técnicas de Programação SQL

Programação Estruturada e Orientada a Objetos. Objetos e Métodos

Transferência de Arquivo: Protocolo FTP

Linguagem de Programação III Aula 2 - Apresentação da Disciplina

Integração Web Services REST Gateway

Professor Jefferson Chaves Jefferson de Oliveira Chaves

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Desenvolvimento de Sistemas para WEB Site:

2.3. PHP Tipos de dados e operadores

Bool setcookie (string nome [, string valor [, int validade [, string caminho [, string dominio [, int seguro]]]]] )

Pág. 1 de 6

Resumo das Propriedades de UDP e de TCP

AJaX Asy s nchronous s J avasc S ript p t a nd d XML

PHP Programando com Orientação a Objetos

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

Programação Web Aula 11 - PHP

Capítulo 2. Camada de aplicação

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

AJAX (Asynchronous Javascript And XML)

Como funciona a plataforma Superlógica? - Livro 4 de 4. Como funciona a interface de integração? Como você poderá complementar o sistema?

Módulos Customizados. Descomplicando a criação de módulos personalizados para Drupal 7

Desenvolvimento de Aplicações Web. Prof. José Eduardo A. de O. Teixeira / j.edu@vqv.com.br

TUTORIAL JAVA AS - HTTP CLIENT COMPOSITION ENVIROMENT 7.1

Este documento descreve como configurar a autenticação da Web a fim trabalhar com uma instalação do proxy.

Aplicações WEB - Cliente Servidor

PHP (Seções, Cookies e Banco de Dados)

Curso De PHP. Aula 4. Formulários. Cookies. Session. Mail

Comunicação entre Processos

Desenvolvendo Websites com PHP

Compiladores II. Fabio Mascarenhas

Simulado de Linguagem de Programação Java

Panorâmica geral sobre PHP. PHP é uma linguagem que permite fazer. um ficheiro em PHP contem código PHP misturado com HTML.

AJAX. Prof. Marcos Alexandruk

Cookies e sessões. HTTP é um protocolo que não mantém estado, isto é não tem memória.

Sumário. Capítulo 1 O que é o PHP? Capítulo 2 Instalação do PHP Capítulo 3 Noções básicas de programação... 25

Python para web com Flask. #PythonAmazonas

Minicurso Web Services com PHP

Documentação do retorno XML referente projeto Busca Endereço por CEP

Linguagem Técnica de Programação III Introdução a PHP

Transcrição:

Classe PHP Client A classe Zend\Http\Client fornece uma interface para realizar pedidos HTTP. O método send() é usado para submeter o pedido ao servidor remoto. Estes pedidos retornam um objeto Zend\Http\Response através do qual podemos ter acesso aos cabeçalhos e corpo da resposta. Exemplos: $client = new Client('http://example.org', array( 'maxredirects' => 0, 'timeout' => 30 Em alternativa pode-se usar o construtor sem argumentos e usar o método seturi() para fornecer o URL e o método setconfig() para fornecer as opções de configuração. $client = new Client(); $client->seturi('http://example.org'); $client->setoptions(array( 'maxredirects' => 0, 'timeout' => 30 Também é possível fazer pedidos usando um objeto Zend\Http\Request configurado: use Zend\Http\Request; $request = new Request(); $request->seturi('http://example.org'); $client = new Client(); $response = $client->send($request);

Efetuar um pedido GET O método do pedido pode ser configurado usando setmethod(). Se nenhum método é especificado, o método colocado pela última invocação de setmethod() é usado. Se setmethod() nunca foi invocado, o método do pedido por omissão é GET. $client = new Client('http://example.org'); Efetuar um pedido POST $client = new Client('http://example.org'); // Performing a POST request $client->setmethod('post'); Todos os métodos de pedidos HTTP estão definidos como constantes da classe Zend\Http\Request: Zend\Http\Request::METHOD_GET Zend\Http\Request::METHOD_POST... use Zend\Http\Request; $client = new Client('http://example.org'); // Performing a POST request $client->setmethod(request::method_post); Envio de parâmetros GET Os parâmetros podem ser especificados: como parte do URL, ou usando o método setparameterget() colocando os parâmetros como um array associativo $client = new Client(); // This is equivalent to setting a URL in the Client's constructor: $client->seturi('http://example.com/index.php?knight=lancelot'); // Adding several parameters with one call $client->setparameterget(array( 'first_name' => 'Bender', 'last_name' => 'Rodríguez', 'made_in' => 'Mexico',

Envio de parâmetros POST Os parâmetros POST só podem ser enviados no corpo de um pedido POST. São especificados usando o método setparameterpost() colocando os parâmetros como um array associativo. $client = new Client('http://example.org'); $client->setmethod('post'); // Setting several POST parameters, one of them with several values $client->setparameterpost(array( 'language' => 'es', 'country' => 'ar', 'selection' => array(45, 32, 80) Colocar cabeçalhos no Pedido A classe Client possui o método setheaders() para colocar cabeçalhos no pedido. Este método cria um novo contentor de cabeçalhos, adiciona os cabeçalhos especificados e coloca o contentor de cabeçalhos no objeto Request. $client->setmethod(request::method_post); $data = '... '; $len = strlen($data); $client->setheaders(array( 'Content-Type' => 'application/x-www-form-urlencoded', 'Content-Length' => $len Envio de dados raw num pedido POST Para enviar dados num pedido POST diferentes de form encoded data existe o método setrawbody(). Este método leva um parâmetro com os dados a enviar no corpo do pedido. Quando se envia dados POST raw deve-se colocar o tipo de encoding usando setenctype(). Exemplo: $xml = '<book>'. '<title>islands in the Stream</title>'. '<author>ernest Hemingway</author>'. '<year>1970</year>'. '</book>'; $client->setmethod('post'); $client->setrawbody($xml); $client->setenctype('text/xml'); $client->send(); Por omissão, Zend\Http\Client aceita e retorna dados como strings PHP. Exemplo: $data = '.. '; $client->setrawbody($data);

HTTP Client - Connection Adapters Um objeto Client usa um objeto connection adapter encarregado de efetuar a ligação ao servidor, escrever os pedidos e ler as respostas. O connection adapter usado por omissão é o Zend\Http\Client\Adapter\Socket, embora possa ser substituído por outros adapters. O adapter Socket permite várias opções de configuração através do método setoptions(). Exemplo: $client->setoptions(['sslverifypeer' => false]); Por omissão o parâmetro 'sslverifypeer' tem o valor TRUE o que significa que é necessário a verificação do certificado SSL usado. Ligação a um URL SSL: Login numa aplicação Asp.Net Web API 2 $client = new Client('https://localhost:44399/Token'); $client->setmethod(request::method_post); $data = "grant_type=password&username=$username&password=$password"; $len = strlen($data); $client->setheaders(array( 'Content-Type' => 'application/x-www-form-urlencoded', 'Content-Length' => $len $client->setoptions(['sslverifypeer' => false]); $client->setrawbody($data); if ($response->issuccess()) { $body = Json::decode($response->getBody( if(!empty($body->access_token)) { if(!isset($_session)){ session_start(); $_SESSION['access_token'] = $body->access_token; $_SESSION['username'] = $username; return true; else return false; else return false;

Classe Response A classe Zend\Http\Response permite ter acesso aos cabeçalhos e corpo da resposta. Alguns métodos: getheaders() retorna o contentor (objeto Zend\Http\Headers) responsável por guardar os cabeçalhos Http. issuccess() retorna um valor bool indicando o sucesso da resposta getcontent() obtém o conteúdo raw da mensagem getbody() obtém o conteúdo descodificado da mensagem

json_decode() - Converte arrays ou objetos JSON em arrays ou objetos PHP $var = json_decode(string $json) $var = json_decode(string $json, bool $assoc=false) json_decode recebe uma string codificada em JSON e converte-a numa variável PHP. Esta função só trabalha com strings codificadas em UTF-8. Se o parâmetro assoc é true, os objetos retornados são convertidos em arrays associativos. Tipicamente os dados JSON representam arrays ou objetos JavaScript e json_decode converte-os em arrays ou objetos PHP. Exemplo de conversão de arrays JSON para arrays PHP: $json = '["laranja", "banana", "morango"]'; $arr = json_decode($json); echo $arr[0]; // laranja Exemplo de conversão de objetos JSON para objetos PHP: $json = '{"titulo": "JavaScript: The Definitive Guide","autor": "David Flanagan", "edicao": 6' $livro = json_decode($json); echo $livro->titulo; // JavaScript: The Definitive Guide Por omissão json_decode converte objetos JSON em objetos PHP. Conversão de objetos JSON para arrays PHP: A função json_decode pode ser usado com o segundo argumento true para converter objetos JSON em arrays associativos PHP $json = '{"titulo": "JavaScript: The Definitive Guide","autor": "David Flanagan", "edicao": 6' $livro = json_decode($json, true); echo $livro['titulo']; // JavaScript: The Definitive Guide Nota: Se uma string JSON contém um objeto JSON o nome e valor devem estar dentro de aspas. Plicas simples não são válidas: $json_errado = "{'nome': 'valor'"; $x = json_decode($json_errado) // null

json_encode() - Converte valores PHP em arrays ou objetos JSON $json = json_encode($value) $json = json_encode($value, JSON_FORCE_OBJECT) json_encode recebe um valor de um tipo PHP e converte-o numa string codificada em JSON. Esta função só trabalha com strings codificadas em UTF-8. Se a conversão tiver sucesso retorna uma string codificada em JSON, senão retorna FALSE. Exemplo de conversão de arrays não associativos PHP: <?php $arr = array(1, 3, 5); echo json_encode($arr); // [1, 3, 5] echo json_encode($arr, JSON_FORCE_OBJECT); // {"0":1, "1":3, "2":5?> Exemplo de conversão de arrays associativos PHP (produzem sempre objetos): <?php $arr = array('a' => 1, 'b' => 2, 'c' => 3); echo json_encode($arr); echo json_encode($arr, JSON_FORCE_OBJECT);?> // {"a":1,"b":2,"c":3 // {"a":1,"b":2,"c":3 Exemplo de conversão de objetos PHP para JSON: <?php class Employee { public $name = ''; public $age = ''; public $role = ''; $obj = new Employee(); $obj->name = 'Alex'; $obj->age = 24; $obj->role = 'PHP Developer'; echo json_encode($obj); // {"name":"alex","age":24,"role":"php Developer"?>

Exemplos Consideremos o recurso Musica representado numa Web Api pela classe Musica: public class Musica { public int MusicaId { get; set; public string Artista { get; set; public string Titulo { get; set; 1. Pedido http não autenticado ao Controlador Musicas de uma Aplicação Web API (consideremos que o Controlador Musicas não tem o filtro [Authorize]) Ação musicas do Controlador da aplicação PHP public function musicasaction() { $client = new Client('http:localhost:46346/api/musicas'); $client->setmethod(request::method_get); $body=$response->getbody(); $musicas=json::decode($body, true); return new ViewModel(array( 'arr' => $musicas, Vista musicas.php <?php $title = 'Musicas'; $this->headtitle($title);?> <h1><?php echo $this->escapehtml($title);?></h1> <table class="table"> <tr> <th>musicaid</th><th>artista</th><th>titulo</th> </tr> <?php foreach ($arr as $musica) :?> <tr> <td><?php echo $this->escapehtml($musica['musicaid']);?></td> <td><?php echo $this->escapehtml($musica['artista']);?></td> <td><?php echo $this->escapehtml($musica['titulo']);?></td> </tr> <?php endforeach;?> </table>

2. Pedido http autenticado ao Controlador Musicas de uma Aplicação Web API (consideremos que o Controlador Musicas tem o filtro [Authorize]) Ação musicas do Controlador da aplicação PHP public function musicasaction() { $client = new Client('http:localhost:46346/api/musicas'); $client->setmethod(request::method_get); if(!isset($_session)){ session_start(); $bearer_token = 'Bearer '. $_SESSION['access_token']; $client->setheaders(array( 'Authorization' => $bearer_token, $body=$response->getbody(); $musicas=json::decode($body, true); return new ViewModel(array( 'arr' => $musicas,

3. Pedido https autenticado ao Controlador Musicas de uma Aplicação Web API (consideremos que o Controlador Musicas tem o filtro [Authorize]) Ação musicas do Controlador da aplicação PHP public function musicasaction() { $client = new Client('https:localhost:44399/api/musicas'); $client->setmethod(request::method_get); if(!isset($_session)){ session_start(); $bearer_token = 'Bearer '. $_SESSION['access_token']; $client->setheaders(array( 'Authorization' => $bearer_token, $client->setoptions(['sslverifypeer' => false]); $body=$response->getbody(); $musicas=json::decode($body, true); return new ViewModel(array( 'arr' => $musicas,