Fix #98: Implement download() method

This commit is contained in:
Zach Borboa
2014-12-11 10:20:41 -08:00
parent 7c2245fdab
commit 63f47648b0
3 changed files with 43 additions and 0 deletions
+10
View File
@@ -182,6 +182,16 @@ class Curl
return $this->exec();
}
public function download($url, $filename)
{
$fh = fopen($filename, 'wb');
$this->setOpt(CURLOPT_FILE, $fh);
$this->get($url);
fclose($fh);
$this->setOpt(CURLOPT_FILE, STDOUT);
return ! $this->error;
}
public function setBasicAuthentication($username, $password = '')
{
$this->setOpt(CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
+21
View File
@@ -330,6 +330,27 @@ class CurlTest extends PHPUnit_Framework_TestCase
$this->assertEquals('OPTIONS', $test->curl->response_headers['X-REQUEST-METHOD']);
}
public function testDownload()
{
$save_to_path = tempnam('/tmp', 'php-curl-class.');
$file_path = Helper\get_png();
$test = new Test();
$test->curl->setHeader('X-DEBUG-TEST', 'download_response');
$this->assertTrue($test->curl->download(Test::TEST_URL, $save_to_path));
$this->assertEquals(filesize($file_path), filesize($save_to_path));
$this->assertEquals(md5_file($file_path), md5_file($save_to_path));
$this->assertEquals(md5_file($file_path), $test->curl->response_headers['ETag']);
$test->curl->setHeader('X-DEBUG-TEST', 'get');
$test->curl->get(Test::TEST_URL);
unlink($file_path);
unlink($save_to_path);
$this->assertFalse(file_exists($file_path));
$this->assertFalse(file_exists($save_to_path));
}
public function testBasicHttpAuth401Unauthorized()
{
$test = new Test();
+12
View File
@@ -1,4 +1,8 @@
<?php
require 'Helper.php';
use \Helper\Test;
$http_raw_post_data = file_get_contents('php://input');
$_PUT = array();
$_PATCH = array();
@@ -117,6 +121,14 @@ if ($test == 'http_basic_auth') {
$rss->appendChild($channel);
echo $doc->saveXML();
exit;
} elseif ($test === 'download_response') {
$png = Helper\create_png();
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="image.png"');
header('Content-Length: ' . strlen($png));
header('ETag: ' . md5($png));
echo $png;
exit;
} elseif ($test === 'error_message') {
if (function_exists('http_response_code')) {
http_response_code(401);