-
-
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: