if ($curlResponse->isSuccess()) {
// Convert the header fields into an array
$hdrs = [];
- $h = $curlResponse->getHeaders();
+ $h = explode("\n", $curlResponse->getHeader());
foreach ($h as $l) {
- foreach ($l as $k => $v) {
- if (empty($hdrs[$k])) {
- $hdrs[$k] = $v;
- }
- $hdrs[$k] .= " " . $v;
+ $header = array_map('trim', explode(':', trim($l), 2));
+ if (count($header) == 2) {
+ list($k, $v) = $header;
+ $hdrs[$k] = $v;
}
}
$type = null;
}
/** {@inheritDoc} */
- public function getHeader($header)
+ public function getHeader(string $field = '')
{
- if (empty($header)) {
- return '';
+ if (empty($field)) {
+ return $this->header;
}
- $header = strtolower(trim($header));
+ $field = strtolower(trim($field));
$headers = $this->getHeaderArray();
- if (isset($headers[$header])) {
- return $headers[$header];
+ if (isset($headers[$field])) {
+ return $headers[$field];
}
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 $header optional header field. Return all fields if empty
+ * @param string $field optional header field. Return all fields if empty
*
* @return string the headers or the specified content of the header variable
*/
- public function getHeader($header);
-
- /**
- * Returns all headers
- * @see MessageInterface::getHeaders()
- *
- * @return string[][]
- */
- public function getHeaders();
+ public function getHeader(string $field = '');
/**
* 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 string[][] associated header array
+ * @return array 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) && $postResult->inHeader('retry-after')) {
+ if (($curl_stat == 503) && stristr($postResult->getHeader(), 'retry-after')) {
return -10;
}
return -9; // timed out
}
- if (($curl_stat == 503) && $postResult->inHeader('retry-after')) {
+ if (($curl_stat == 503) && (stristr($postResult->getHeader(), 'retry-after'))) {
return -10;
}
$xml = '';
- if ($curlResult->inHeader('Content-Type') &&
- stristr($curlResult->getHeader('Content-Type'), 'application/atom+xml')) {
+ if (stristr($curlResult->getHeader(), 'Content-Type: application/atom+xml')) {
$xml = $curlResult->getBody();
}
$xml = '';
- if ($curlResult->inHeader('Content-Type') &&
- stristr($curlResult->getHeader('Content-Type'), 'application/atom+xml')) {
+ if (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) && $postResult->inHeader('retry-after')) {
+ if (($return_code == 503) && (stristr($postResult->getHeader(), 'retry-after'))) {
return -1;
}
return $siteinfo;
}
+ $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', $curlResult->getContentType(), $matches)) {
+ if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $header, $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');
$this->assertTrue($curlResult->isSuccess());
$this->assertFalse($curlResult->isTimeout());
$this->assertFalse($curlResult->isRedirectUrl());
- $this->assertSame($headerArray, $curlResult->getHeaders());
+ $this->assertSame($header, $curlResult->getHeader());
$this->assertSame($body, $curlResult->getBody());
$this->assertSame('text/html; charset=utf-8', $curlResult->getContentType());
$this->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');
$this->assertTrue($curlResult->isSuccess());
$this->assertFalse($curlResult->isTimeout());
$this->assertTrue($curlResult->isRedirectUrl());
- $this->assertSame($headerArray, $curlResult->getHeaders());
+ $this->assertSame($header, $curlResult->getHeader());
$this->assertSame($body, $curlResult->getBody());
$this->assertSame('text/html; charset=utf-8', $curlResult->getContentType());
$this->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');
$this->assertFalse($curlResult->isSuccess());
$this->assertTrue($curlResult->isTimeout());
$this->assertFalse($curlResult->isRedirectUrl());
- $this->assertSame($headerArray, $curlResult->getHeaders());
+ $this->assertSame($header, $curlResult->getHeader());
$this->assertSame($body, $curlResult->getBody());
$this->assertSame('text/html; charset=utf-8', $curlResult->getContentType());
$this->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');
$this->assertTrue($curlResult->isSuccess());
$this->assertFalse($curlResult->isTimeout());
$this->assertTrue($curlResult->isRedirectUrl());
- $this->assertSame($headerArray, $curlResult->getHeaders());
+ $this->assertSame($header, $curlResult->getHeader());
$this->assertSame($body, $curlResult->getBody());
$this->assertSame('text/html; charset=utf-8', $curlResult->getContentType());
$this->assertSame('https://test.local/test/it?key=value', $curlResult->getUrl());
'url' => 'https://test.local'
]);
- $this->assertNotEmpty($curlResult->getHeaders());
+ $this->assertNotEmpty($curlResult->getHeader());
$this->assertEmpty($curlResult->getHeader('wrongHeader'));
}
}