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