LTI Integration Library 4.10.3
PHP class library for building LTI integrations
 
Loading...
Searching...
No Matches
StreamClient.php
1<?php
2
3namespace ceLTIc\LTI\Http;
4
6
15{
16
24 public function send(HttpMessage $message)
25 {
26 if (!is_array($message->requestHeaders)) {
27 $message->requestHeaders = array();
28 }
29 if (count(preg_grep("/^Accept:/i", $message->requestHeaders)) === 0) {
30 $message->requestHeaders[] = 'Accept: */*';
31 }
32 if (($message->getMethod() !== 'GET') && !is_null($message->request) &&
33 (count(preg_grep("/^Content-Type:/i", $message->requestHeaders)) === 0)) {
34 $message->requestHeaders[] = 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8';
35 }
36 $opts = [
37 'method' => $message->getMethod(),
38 'content' => $message->request,
39 'header' => $message->requestHeaders,
40 'ignore_errors' => true,
41 ];
42
43 $message->requestHeaders = "{$message->getMethod()} {$message->getUrl()}\n" . implode("\n", $message->requestHeaders);
44 try {
45 $ctx = stream_context_create(['http' => $opts]);
46 $fp = @fopen($message->getUrl(), 'rb', false, $ctx);
47 if ($fp) {
48 $resp = stream_get_contents($fp);
49 $message->ok = $resp !== false;
50 if ($message->ok) {
51 $message->response = $resp;
52 // see http://php.net/manual/en/reserved.variables.httpresponseheader.php
53 if (isset($http_response_header[0])) {
54 $message->responseHeaders = trim(implode("\n", $http_response_header));
55 if (preg_match("/HTTP\/\d.\d\s+(\d+)/", $http_response_header[0], $out)) {
56 $message->status = $out[1];
57 }
58 $message->ok = $message->status < 400;
59 if (!$message->ok) {
60 $message->error = $http_response_header[0];
61 }
62 }
63 return $message->ok;
64 }
65 }
66 } catch (\Exception $e) {
67 $message->error = $e->getMessage();
68 $message->ok = false;
69 return false;
70 }
71 $message->error = error_get_last()["message"];
72 $message->ok = false;
73 return false;
74 }
75
76}
Class to represent an HTTP message request.
getUrl()
Get the target URL for the request.
getMethod()
Get the HTTP method for the request.
Class to implement the HTTP message interface using a file stream.
send(HttpMessage $message)
Send the request to the target URL.
Interface to represent an HTTP message client.