mirror of
https://github.com/friendica/friendica
synced 2024-11-11 04:22:53 +00:00
Merge pull request #7687 from annando/get-header-field
Enable the possibility to fetch a specific header variable
This commit is contained in:
commit
a855c6888b
2 changed files with 118 additions and 3 deletions
|
@ -26,6 +26,11 @@ class CurlResult
|
||||||
*/
|
*/
|
||||||
private $header;
|
private $header;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array the HTTP headers of the Curl call
|
||||||
|
*/
|
||||||
|
private $header_fields;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var boolean true (if HTTP 2xx result) or false
|
* @var boolean true (if HTTP 2xx result) or false
|
||||||
*/
|
*/
|
||||||
|
@ -129,6 +134,7 @@ class CurlResult
|
||||||
|
|
||||||
$this->body = substr($result, strlen($header));
|
$this->body = substr($result, strlen($header));
|
||||||
$this->header = $header;
|
$this->header = $header;
|
||||||
|
$this->header_fields = []; // Is filled on demand
|
||||||
}
|
}
|
||||||
|
|
||||||
private function checkSuccess()
|
private function checkSuccess()
|
||||||
|
@ -226,11 +232,65 @@ class CurlResult
|
||||||
/**
|
/**
|
||||||
* Returns the Curl headers
|
* Returns the Curl headers
|
||||||
*
|
*
|
||||||
* @return string the Curl headers
|
* @param string $field optional header field. Return all fields if empty
|
||||||
|
*
|
||||||
|
* @return string the Curl headers or the specified content of the header variable
|
||||||
*/
|
*/
|
||||||
public function getHeader()
|
public function getHeader(string $field = '')
|
||||||
{
|
{
|
||||||
return $this->header;
|
if (empty($field)) {
|
||||||
|
return $this->header;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field = strtolower(trim($field));
|
||||||
|
|
||||||
|
$headers = $this->getHeaderArray();
|
||||||
|
|
||||||
|
if (isset($headers[$field])) {
|
||||||
|
return $headers[$field];
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a specified header exists
|
||||||
|
*
|
||||||
|
* @param string $field header field
|
||||||
|
*
|
||||||
|
* @return boolean "true" if header exists
|
||||||
|
*/
|
||||||
|
public function inHeader(string $field)
|
||||||
|
{
|
||||||
|
$field = strtolower(trim($field));
|
||||||
|
|
||||||
|
$headers = $this->getHeaderArray();
|
||||||
|
|
||||||
|
return array_key_exists($field, $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Curl headers as an associated array
|
||||||
|
*
|
||||||
|
* @return array associated header array
|
||||||
|
*/
|
||||||
|
public function getHeaderArray()
|
||||||
|
{
|
||||||
|
if (!empty($this->header_fields)) {
|
||||||
|
return $this->header_fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->header_fields = [];
|
||||||
|
|
||||||
|
$lines = explode("\n", trim($this->header));
|
||||||
|
foreach ($lines as $line) {
|
||||||
|
$parts = explode(':', $line);
|
||||||
|
$headerfield = strtolower(trim(array_shift($parts)));
|
||||||
|
$headerdata = trim(implode(':', $parts));
|
||||||
|
$this->header_fields[$headerfield] = $headerdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->header_fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -134,4 +134,59 @@ class CurlResultTest extends TestCase
|
||||||
$this->assertSame('https://test.local/test/it?key=value', $curlResult->getUrl());
|
$this->assertSame('https://test.local/test/it?key=value', $curlResult->getUrl());
|
||||||
$this->assertSame('https://test.other/some/?key=value', $curlResult->getRedirectUrl());
|
$this->assertSame('https://test.other/some/?key=value', $curlResult->getRedirectUrl());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testInHeader()
|
||||||
|
{
|
||||||
|
$header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
|
||||||
|
$body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
|
||||||
|
|
||||||
|
$curlResult = new CurlResult('https://test.local', $header . $body, [
|
||||||
|
'http_code' => 200,
|
||||||
|
'content_type' => 'text/html; charset=utf-8',
|
||||||
|
'url' => 'https://test.local'
|
||||||
|
]);
|
||||||
|
$this->assertTrue($curlResult->inHeader('vary'));
|
||||||
|
$this->assertFalse($curlResult->inHeader('wrongHeader'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testGetHeaderArray()
|
||||||
|
{
|
||||||
|
$header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
|
||||||
|
$body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
|
||||||
|
|
||||||
|
$curlResult = new CurlResult('https://test.local', $header . $body, [
|
||||||
|
'http_code' => 200,
|
||||||
|
'content_type' => 'text/html; charset=utf-8',
|
||||||
|
'url' => 'https://test.local'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$headers = $curlResult->getHeaderArray();
|
||||||
|
|
||||||
|
$this->assertNotEmpty($headers);
|
||||||
|
$this->assertArrayHasKey('vary', $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @small
|
||||||
|
*/
|
||||||
|
public function testGetHeaderWithParam()
|
||||||
|
{
|
||||||
|
$header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
|
||||||
|
$body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
|
||||||
|
|
||||||
|
$curlResult = new CurlResult('https://test.local', $header . $body, [
|
||||||
|
'http_code' => 200,
|
||||||
|
'content_type' => 'text/html; charset=utf-8',
|
||||||
|
'url' => 'https://test.local'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertNotEmpty($curlResult->getHeader());
|
||||||
|
$this->assertEmpty($curlResult->getHeader('wrongHeader'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue