diff --git a/src/YurunHttp/Handler/Curl.php b/src/YurunHttp/Handler/Curl.php index e8911fa..3d04a1e 100644 --- a/src/YurunHttp/Handler/Curl.php +++ b/src/YurunHttp/Handler/Curl.php @@ -735,7 +735,6 @@ public function coBatch($requests, $timeout = null) $result[$k] = null; $curlHandler = curl_init(); $recvHeaders[$k] = $saveFileFps[$k] = null; - $this->buildCurlHandlerBase($request, $curlHandler, $recvHeaders[$k], $saveFileFps[$k]); $files = $request->getUploadedFiles(); $body = (string) $request->getBody(); if (!empty($files)) @@ -743,6 +742,7 @@ public function coBatch($requests, $timeout = null) $body = FormDataBuilder::build($body, $files, $boundary); $request = $request->withHeader('Content-Type', MediaType::MULTIPART_FORM_DATA . '; boundary=' . $boundary); } + $this->buildCurlHandlerBase($request, $curlHandler, $recvHeaders[$k], $saveFileFps[$k]); $this->buildCurlHandlerEx($request, $curlHandler, null, null, $body); curl_multi_add_handle($mh, $curlHandler); $curlHandlers[$k] = $curlHandler; diff --git a/tests/unit/HttpRequestTest/HttpRequestTest.php b/tests/unit/HttpRequestTest/HttpRequestTest.php index e78a14a..fa15f23 100644 --- a/tests/unit/HttpRequestTest/HttpRequestTest.php +++ b/tests/unit/HttpRequestTest/HttpRequestTest.php @@ -639,6 +639,53 @@ public function testCoBatch(): void }); } + /** + * batch. + * + * @return void + */ + public function testCoBatchUploadMulti(): void + { + $this->call(function () { + $file1 = new UploadedFile(basename(__FILE__), MediaType::TEXT_HTML, __FILE__); + $file2Path = __DIR__ . '/1.txt'; + $file2 = new UploadedFile('1.txt', MediaType::TEXT_PLAIN, $file2Path); + $http1 = new HttpRequest(); + $http1->url($this->host . '?a=info'); + $http1->method('POST'); + $http1->content([ + 'file' => $file1, + ]); + $http2 = new HttpRequest(); + $http2->url($this->host . '?a=info'); + $http2->method('POST'); + $http2->content([ + 'file' => $file2, + ]); + $result = Batch::run([ + 'http1' => $http1, + 'http2' => $http2, + ]); + foreach ($result as $k => $response) { + $this->assertResponse($response); + $data = $response->json(true); + $this->assertTrue(isset($data['files']['file'])); + $file = $data['files']['file']; + if ($k === 'http1') { + $content = file_get_contents(__FILE__); + $this->assertEquals(MediaType::TEXT_HTML, $file['type']); + } elseif ($k === 'http2') { + $content = file_get_contents($file2Path); + $this->assertEquals(MediaType::TEXT_PLAIN, $file['type']); + } else { + $content = ''; + } + $this->assertEquals(\strlen($content), $file['size']); + $this->assertEquals(md5($content), $file['hash']); + } + }); + } + /** * batch. *