$http = new \Qii_Library_Http();

// set cookie file
$http->setCookiePath('cookie.dat');

// add text/plain header for web sapi handler
if (php_sapi_name() !== 'cli') {
    header('Content-Type: text/plain');
}

// simple load response contents
echo '1. loading content of baidu ... ';
$response = $http->get('http://www.baidu.com');
echo number_format(strlen($response)) . ' bytes', PHP_EOL;

echo '2. fetching search results of `php\' in baidu ... ';
$response = $http->get('http://www.baidu.com/s', ['wd' => 'php']);
echo number_format(strlen($response)) . ' bytes', PHP_EOL;
echo '   time costs: ', $response->timeCost, PHP_EOL;
echo '   response.status: ', $response->status, ' ', $response->statusText, PHP_EOL;
echo '   response.headers.content-type: ', $response->getHeader('content-type'), PHP_EOL;
echo '   response.headers.transfer-encoding: ', $response->getHeader('transfer-encoding'), PHP_EOL;
echo '   response.cookies.BDSVRTM: ', $response->getCookie('BDSVRTM'), PHP_EOL;

echo '3. testing error response ... ';
$response = $http->get('http://127.0.0.1:65535');
echo $response->hasError() ? 'ERROR: ' . $response->error : 'OK', PHP_EOL;

echo '4. test head request to baidu ... ';
$response = $http->head('http://www.baidu.com');
echo number_format(strlen($response)) . ' bytes', PHP_EOL;
echo '   response.headers.server: ', $response->getHeader('server'), PHP_EOL;

echo '5. post request to baidu ... ';
//Client::debug('open');
$response = $http->post('http://www.baidu.com/s', ['wd' => 'php', 'ie' => 'utf-8']);
echo number_format(strlen($response)) . ' bytes', PHP_EOL;
if ($response->hasError()) {
    echo '   response.error: ', $response->error, PHP_EOL;
}

echo '6. testing postJSON request ...';
$data = $http->postJson('http://api.mcloudlife.com/api/version');
echo 'OK', PHP_EOL;
echo '   response.json: ', json_encode($data), PHP_EOL;

echo '7. customize request for restful API ... ';
$request = new Request('http://api.mcloudlife.com/open/record/bp/1024');
$request->setMethod('GET');
$request->setHeader('user-agent', 'mCloud/2.4.3D');
// bearer token authorization
$request->setHeader('authorization', 'Bearer f4fe27fe5f270a4e8edc1a07289452d1');
$request->setHeader('accept', 'application/json');
$response = $http->exec($request);
if ($response->hasError()) {
    echo 'ERROR', PHP_EOL;
    echo '   response.error: ', $response->error, PHP_EOL;
} else {
    echo 'OK', PHP_EOL;
    echo '   response.status: ', $response->status, ' ', $response->statusText, PHP_EOL;
    echo '   response.body: ', $response->body, PHP_EOL;
}

echo '8. post request & upload files ... ';
$request = new Request('http://hightman.cn/post.php');
$request->setMethod('POST');
$request->setHeader('x-server-ip', '202.75.216.234');
$request->addPostField('post1', 'post1-value');
$request->addPostField('post2', 'post2-value');
$request->addPostFile('upload1', 'upload1-name.txt', 'hi, just a test');
$request->addPostFile('upload2', __FILE__);
$response = $http->exec($request);
echo number_format(strlen($response)) . ' bytes', PHP_EOL;
echo $response, PHP_EOL;

echo '9. multiple get requests in parallel ... ', PHP_EOL;

// define callback as normal function
function test_cb($res, $req, $key)
{
    echo '   ', $req->getUrl(), ', ', number_format(strlen($res)), ' bytes in ', sprintf('%.4f', $res->timeCost), 's', PHP_EOL;
    // even you can redirect HERE
    if ($key === 'baidu' && !strstr($req->getUrl(), 'czxiu')) {
        $res->redirect('http://www.czxiu.com');
    }
}

$http->setParser('test_cb');
$responses = $http->mget([
    'baidu' => 'http://www.baidu.com',
    'sina' => 'http://news.sina.com.cn',
    'qq' => 'http://www.qq.com',
]);

echo '10. process multiple various requests in parallel ... ', PHP_EOL;

// define callback as object
class testCb implements \hightman\http\ParseInterface
{
    public function parse(Response $res, Request $req, $key)
    {
        echo '    ', $req->getMethod(), ' /', $key, ' finished, ', number_format(strlen($res)), ' bytes in ', sprintf('%.4f', $res->timeCost), 's', PHP_EOL;
    }
}

// construct requests
$requests = [];
$requests['version'] = new Request('http://api.mcloudlife.com/api/version', 'POST');
$requests['baidu'] = new Request('http://www.baidu.com/s?wd=php');

$request = new Request('http://api.mcloudlife.com/open/auth/token');
$request->setMethod('POST');
$request->setHeader('accept', 'application/json');
$request->setJsonBody([
    'client_id' => 'client_id',
    'client_secret' => 'client_secret',
]);
$requests['token'] = $request;

$http->setParser(new testCb());
$responses = $http->exec($requests);