- Split functionality "getHeader()" and "getHeaders()" analog to IMessageInterface::getHeader/s()
- Fix functionality at various places - Adapt CurlResultTest
}
/** {@inheritDoc} */
- public function getHeader(string $field = '')
+ public function getHeader($header)
{
- if (empty($field)) {
- return $this->header;
+ if (empty($header)) {
+ return '';
}
- $field = strtolower(trim($field));
+ $header = strtolower(trim($header));
$headers = $this->getHeaderArray();
- if (isset($headers[$field])) {
- return $headers[$field];
+ if (isset($headers[$header])) {
+ return $headers[$header];
}
return '';
}
+ /** {@inheritDoc} */
+ public function getHeaders()
+ {
+ return $this->getHeaderArray();
+ }
+
/** {@inheritDoc} */
public function inHeader(string $field)
{
'timeout' => $timeout,
'accept_content' => $accept_content,
'cookiejar' => $cookiejar
- ],
- $redirects
+ ]
);
}
namespace Friendica\Network;
+use Psr\Http\Message\MessageInterface;
+
/**
* Temporary class to map Friendica used variables based on PSR-7 HTTPResponse
*/
/**
* Returns the headers
+ * @see MessageInterface::getHeader()
*
- * @param string $field optional header field. Return all fields if empty
+ * @param string $header optional header field. Return all fields if empty
*
* @return string the headers or the specified content of the header variable
*/
- public function getHeader(string $field = '');
+ public function getHeader($header);
+
+ /**
+ * Returns all headers
+ * @see MessageInterface::getHeaders()
+ *
+ * @return string[][]
+ */
+ public function getHeaders();
/**
* Check if a specified header exists
+ * @see MessageInterface::hasHeader()
*
* @param string $field header field
*
/**
* Returns the headers as an associated array
+ * @see MessageInterface::getHeaders()
+ * @deprecated
*
- * @return array associated header array
+ * @return string[][] associated header array
*/
public function getHeaderArray();
public function getRedirectUrl();
/**
+ * @see MessageInterface::getBody()
+ *
* @return string
*/
public function getBody();
return -9; // timed out
}
- if (($curl_stat == 503) && (stristr($postResult->getHeader(), 'retry-after'))) {
+ if (($curl_stat == 503) && $postResult->inHeader('retry-after')) {
return -10;
}
$xml = '';
- if (stristr($curlResult->getHeader(), 'Content-Type: application/atom+xml')) {
+ if ($curlResult->inHeader('Content-Type') &&
+ stristr($curlResult->getHeader('Content-Type'), 'application/atom+xml')) {
$xml = $curlResult->getBody();
}
$xml = '';
- if (stristr($curlResult->getHeader(), 'Content-Type: application/atom+xml')) {
+ if ($curlResult->inHeader('Content-Type') &&
+ stristr($curlResult->getHeader('Content-Type'), 'application/atom+xml')) {
Logger::log('Directly fetched XML for URI ' . $related_uri, Logger::DEBUG);
$xml = $curlResult->getBody();
}
return -1;
}
- if (($return_code == 503) && (stristr($postResult->getHeader(), 'retry-after'))) {
+ if (($return_code == 503) && $postResult->inHeader('retry-after')) {
return -1;
}
}
}
- $header = $curlResult->getHeader();
$body = $curlResult->getBody();
if ($do_oembed) {
$charset = '';
// Look for a charset, first in headers
// Expected form: Content-Type: text/html; charset=ISO-8859-4
- if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $header, $matches)) {
+ if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $curlResult->getContentType(), $matches)) {
$charset = trim(trim(trim(array_pop($matches)), ';,'));
}
--- /dev/null
+<?php
+
+return [
+ 'http/2 200' => '',
+ 'date' => 'Thu, 11 Oct 2018 18:43:54 GMT',
+ 'content-type' => 'text/html; charset=utf-8',
+ 'vary' => 'Accept-Encoding',
+ 'server' => 'Mastodon',
+ 'x-frame-options' => 'SAMEORIGIN',
+ 'x-content-type-options' => 'nosniff',
+ 'x-xss-protection' => '1; mode=block',
+ 'etag' => 'W/"706e6c48957e1d46ecf9d7597a7880af"',
+ 'cache-control' => 'max-age=0, private, must-revalidate',
+ 'set-cookie' => '_mastodon_session=v3kcy%2FW3aZYBBvZUohuwksEKwzYIyEUlEuJ1KqTAfWPKvVQq%2F4UuJ39zp621VyfpQNlvY46TL%2FYutzXowSLYQBNFCJcrEiF04aU0TdtHls9zynMiyeHhoVgCijOXWXNt9%2FCmpQ49RkNEujkv9NaJ0cum32MCVZKjE9%2BMKmLM%2F8ZygZeLBGJ7sg%3D%3D--QGIiU0%2FpXc3Aym8F--he2iRRPePOdtEs3z%2BufSXg%3D%3D; path=/; secure; HttpOnly',
+ 'x-request-id' => 'a0c0b8e7-cd60-4efa-b79b-cf1b0d5a0784',
+ 'x-runtime' => '0.049566',
+ 'strict-transport-security' => 'max-age=31536000; includeSubDomains; preload',
+ 'referrer-policy' => 'same-origin',
+ 'content-security-policy' => "frame-ancestors 'none'; script-src 'self'; object-src 'self'; img-src * data: blob:; media-src 'self' data:; font-src 'self' data: https://fonts.gstatic.com/; connect-src 'self' blob: wss://mastodonten.de",
+];
--- /dev/null
+<?php
+
+return [
+ 'http/2 301' => '',
+ 'date' => 'Thu, 11 Oct 2018 18:43:54 GMT',
+ 'content-type' => 'text/html; charset=utf-8',
+ 'vary' => 'Accept-Encoding',
+ 'server' => 'Mastodon',
+ 'location' => 'https://test.other/some/',
+ 'x-frame-options' => 'SAMEORIGIN',
+ 'x-content-type-options' => 'nosniff',
+ 'x-xss-protection' => '1; mode=block',
+ 'etag' => 'W/"706e6c48957e1d46ecf9d7597a7880af"',
+ 'cache-control' => 'max-age=0, private, must-revalidate',
+ 'set-cookie' => '_mastodon_session=v3kcy%2FW3aZYBBvZUohuwksEKwzYIyEUlEuJ1KqTAfWPKvVQq%2F4UuJ39zp621VyfpQNlvY46TL%2FYutzXowSLYQBNFCJcrEiF04aU0TdtHls9zynMiyeHhoVgCijOXWXNt9%2FCmpQ49RkNEujkv9NaJ0cum32MCVZKjE9%2BMKmLM%2F8ZygZeLBGJ7sg%3D%3D--QGIiU0%2FpXc3Aym8F--he2iRRPePOdtEs3z%2BufSXg%3D%3D; path=/; secure; HttpOnly',
+ 'x-request-id' => 'a0c0b8e7-cd60-4efa-b79b-cf1b0d5a0784',
+ 'x-runtime' => '0.049566',
+ 'strict-transport-security' => 'max-age=31536000; includeSubDomains; preload',
+ 'referrer-policy' => 'same-origin',
+ 'content-security-policy' => "frame-ancestors 'none'; script-src 'self'; object-src 'self'; img-src * data: blob:; media-src 'self' data:; font-src 'self' data: https://fonts.gstatic.com/; connect-src 'self' blob: wss://mastodonten.de",
+];
public function testNormal()
{
$header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
+ $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php');
$body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
self::assertTrue($curlResult->isSuccess());
self::assertFalse($curlResult->isTimeout());
self::assertFalse($curlResult->isRedirectUrl());
- self::assertSame($header, $curlResult->getHeader());
+ self::assertSame($headerArray, $curlResult->getHeaders());
self::assertSame($body, $curlResult->getBody());
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
self::assertSame('https://test.local', $curlResult->getUrl());
public function testRedirect()
{
$header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
+ $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php');
$body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
self::assertTrue($curlResult->isSuccess());
self::assertFalse($curlResult->isTimeout());
self::assertTrue($curlResult->isRedirectUrl());
- self::assertSame($header, $curlResult->getHeader());
+ self::assertSame($headerArray, $curlResult->getHeaders());
self::assertSame($body, $curlResult->getBody());
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
self::assertSame('https://test.local/test/it', $curlResult->getUrl());
public function testTimeout()
{
$header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
+ $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php');
$body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
self::assertFalse($curlResult->isSuccess());
self::assertTrue($curlResult->isTimeout());
self::assertFalse($curlResult->isRedirectUrl());
- self::assertSame($header, $curlResult->getHeader());
+ self::assertSame($headerArray, $curlResult->getHeaders());
self::assertSame($body, $curlResult->getBody());
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
self::assertSame('https://test.local/test/it', $curlResult->getRedirectUrl());
public function testRedirectHeader()
{
$header = file_get_contents(__DIR__ . '/../../datasets/curl/about.redirect');
+ $headerArray = include(__DIR__ . '/../../datasets/curl/about.redirect.php');
$body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
self::assertTrue($curlResult->isSuccess());
self::assertFalse($curlResult->isTimeout());
self::assertTrue($curlResult->isRedirectUrl());
- self::assertSame($header, $curlResult->getHeader());
+ self::assertSame($headerArray, $curlResult->getHeaders());
self::assertSame($body, $curlResult->getBody());
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
self::assertSame('https://test.local/test/it?key=value', $curlResult->getUrl());
'url' => 'https://test.local'
]);
- self::assertNotEmpty($curlResult->getHeader());
+ self::assertNotEmpty($curlResult->getHeaders());
self::assertEmpty($curlResult->getHeader('wrongHeader'));
}
}