Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F6026094
PrepareBodyMiddleware.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
PrepareBodyMiddleware.php
View Options
<?php
namespace
GuzzleHttp
;
use
GuzzleHttp\Promise\PromiseInterface
;
use
Psr\Http\Message\RequestInterface
;
/**
* Prepares requests that contain a body, adding the Content-Length,
* Content-Type, and Expect headers.
*
* @final
*/
class
PrepareBodyMiddleware
{
/**
* @var callable(RequestInterface, array): PromiseInterface
*/
private
$nextHandler
;
/**
* @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.
*/
public
function
__construct
(
callable
$nextHandler
)
{
$this
->
nextHandler
=
$nextHandler
;
}
public
function
__invoke
(
RequestInterface
$request
,
array
$options
):
PromiseInterface
{
$fn
=
$this
->
nextHandler
;
// Don't do anything if the request has no body.
if
(
$request
->
getBody
()->
getSize
()
===
0
)
{
return
$fn
(
$request
,
$options
);
}
$modify
=
[];
// Add a default content-type if possible.
if
(!
$request
->
hasHeader
(
'Content-Type'
))
{
if
(
$uri
=
$request
->
getBody
()->
getMetadata
(
'uri'
))
{
if
(
is_string
(
$uri
)
&&
$type
=
Psr7\MimeType
::
fromFilename
(
$uri
))
{
$modify
[
'set_headers'
][
'Content-Type'
]
=
$type
;
}
}
}
// Add a default content-length or transfer-encoding header.
if
(!
$request
->
hasHeader
(
'Content-Length'
)
&&
!
$request
->
hasHeader
(
'Transfer-Encoding'
)
)
{
$size
=
$request
->
getBody
()->
getSize
();
if
(
$size
!==
null
)
{
$modify
[
'set_headers'
][
'Content-Length'
]
=
$size
;
}
else
{
$modify
[
'set_headers'
][
'Transfer-Encoding'
]
=
'chunked'
;
}
}
// Add the expect header if needed.
$this
->
addExpectHeader
(
$request
,
$options
,
$modify
);
return
$fn
(
Psr7\Utils
::
modifyRequest
(
$request
,
$modify
),
$options
);
}
/**
* Add expect header
*/
private
function
addExpectHeader
(
RequestInterface
$request
,
array
$options
,
array
&
$modify
):
void
{
// Determine if the Expect header should be used
if
(
$request
->
hasHeader
(
'Expect'
))
{
return
;
}
$expect
=
$options
[
'expect'
]
??
null
;
// Return if disabled or using HTTP/1.0
if
(
$expect
===
false
||
$request
->
getProtocolVersion
()
===
'1.0'
)
{
return
;
}
// The expect header is unconditionally enabled
if
(
$expect
===
true
)
{
$modify
[
'set_headers'
][
'Expect'
]
=
'100-Continue'
;
return
;
}
// By default, send the expect header when the payload is > 1mb
if
(
$expect
===
null
)
{
$expect
=
1048576
;
}
// Always add if the body cannot be rewound, the size cannot be
// determined, or the size is greater than the cutoff threshold
$body
=
$request
->
getBody
();
$size
=
$body
->
getSize
();
if
(
$size
===
null
||
$size
>=
(
int
)
$expect
||
!
$body
->
isSeekable
())
{
$modify
[
'set_headers'
][
'Expect'
]
=
'100-Continue'
;
}
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Oct 4 2026, 16:32 (5 w, 4 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
2e/f6/5b560c564defa83b719f21c96647
Default Alt Text
PrepareBodyMiddleware.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment