-
-
Save carlalexander/c779b473f62dcd1a4ca26fcaa637ec59 to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* By default, cURL sends the "Expect" header all the time which severely impacts | |
* performance. Instead, we'll send it if the body is larger than 1 mb like | |
* Guzzle does. | |
*/ | |
function add_expect_header(array $arguments) | |
{ | |
$arguments['headers']['expect'] = ''; | |
if (is_array($arguments['body'])) { | |
$bytesize = 0; | |
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arguments['body'])); | |
foreach ($iterator as $datum) { | |
$bytesize += strlen((string) $datum); | |
if ($bytesize >= 1048576) { | |
$arguments['headers']['expect'] = '100-Continue'; | |
break; | |
} | |
} | |
} elseif (!empty($arguments['body']) && strlen((string) $arguments['body']) > 1048576) { | |
$arguments['headers']['expect'] = '100-Continue'; | |
} | |
return $arguments; | |
} | |
add_filter('http_request_args', 'add_expect_header'); |
@indysigner sorry I just saw this now. I missed your notification. functions.php
should be fine.
@danieliser @nawawi Yeah, there were a few issues with the code when developing a patch for core. I've updated the gist with the core patch.
FYI for anyone tracking this issue. I worked on core on a fix here. I think it'll be live once WordPress 5.8 lands. It's not in as of 5.7.2.
@carlalexander noted with thanks.
It works great, but i still get "Array to string conversion", on this line:
$body = $arguments['body'];
if ( is_array( $body ) )
{
$body = implode('', $body); // not always, but sometimes i get "Array to string conversion" notice
}
I'm not yet ready for WP 5.8, since big changes in widgets and my woocommerce plugins, etc
@Lolosan do you still get it with the updated code?
@Lolosan do you still get it with the updated code?
Thank you for the updated code, I'm testing in a woocommerce site with heavy use of APIs and everything seems great
This fix already comes with WP5.8, right? No need to use it after?
@Lolosan That's correct 😄
Hi, this should fix the body being array issue: