. */ namespace App; use Illuminate\Support\Facades\Cache; use \GuzzleHttp\Client as GuzzleClient; class Downloader { /** * @var GuzzleClient */ protected $client; public $cookies = ''; public function get_text($url, $post = []): string { if (empty($this->client)) { $this->client = new GuzzleClient([ 'timeout' => 30, ]); } if (env('DEBUG') && Cache::has($url)) { return Cache::get($url); } if ($post === []) { $response = $this->client->request('GET', $url, [ 'cookies' => $this->cookies, ]); } else { $response = $this->client->request('POST', $url, [ 'form_params' => $post, 'cookies' => $this->cookies, ]); } $resp = (string) $response->getBody(); Cache::put($url, $resp); return $resp; } public function download($url, $outFile) { $options = array( CURLOPT_FILE => fopen($outFile, 'w'), CURLOPT_TIMEOUT => 28800, // set this to 8 hours so we dont timeout on big files CURLOPT_URL => $url ); $ch = curl_init(); curl_setopt_array($ch, $options); curl_exec($ch); curl_close($ch); } public function setCookies($cookies): void { $this->cookies = $cookies; } public function get_json($url) { if (empty($this->client)) { $this->client = new GuzzleClient([ 'timeout' => 30, ]); } $response = $this->client->request('GET', $url, [ 'cookies' => $this->cookies, ]); $text = (string) $response->getBody(); return json_decode($text); } }