* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace App\Libs\TikTok\Kernel\Http; use App\Libs\TikTok\Kernel\Exceptions\HttpException; use App\Libs\TikTok\Kernel\Support\Collection; use GuzzleHttp\Psr7\Response as GuzzleResponse; use Psr\Http\Message\ResponseInterface; /** * Class Response. * * @author overtrue */ class Response extends GuzzleResponse { /** * @return string */ public function getBodyContents(): string { $this->getBody()->rewind(); $contents = $this->getBody()->getContents(); $this->getBody()->rewind(); return $contents; } /** * @param ResponseInterface $response * * @return Response */ public static function buildFromPsrResponse(ResponseInterface $response): Response { return new static( $response->getStatusCode(), $response->getHeaders(), $response->getBody(), $response->getProtocolVersion(), $response->getReasonPhrase() ); } /** * Build to json. * @return string * @throws HttpException * @author zhaoxiang */ public function toJson(): string { return json_encode($this->toArray()); } /** * Build to array. * @return array * @throws HttpException * @author zhaoxiang */ public function toArray(): array { $content = $this->removeControlCharacters($this->getBodyContents()); if (false !== stripos($this->getHeaderLine('Content-Type'), 'xml') || 0 === stripos($content, ' */ public function toCollection(): Collection { return new Collection($this->toArray()); } /** * * @return object * @throws HttpException * @author zhaoxiang */ public function toObject(): object { return json_decode($this->toJson()); } /** * @return string */ public function __toString() { return $this->getBodyContents(); } /** * @param string $content * * @return string */ protected function removeControlCharacters(string $content): string { return \preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', $content); } }