EasyHttp 是一個輕量級、語義化、對IDE友好的HTTP客戶端,支持常見的HTTP請求、異步請求和並發請求,讓你可以快速地使用 HTTP 請求與其他 Web 應用進行通信。
EasyHttp並不強制依賴於cURL,如果沒有安裝cURL,EasyHttp會自動選擇使用PHP流處理,或者你也可以提供自己的發送HTTP請求的處理方式。
1、新增異步並發請求use Gouguoyin\EasyHttp\Response;use Gouguoyin\EasyHttp\RequestException;$promises = [ Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json'), Http::getAsync('http1://easyhttp.gouguoyin.cn/api/sleep1.json', ['name' => 'gouguoyin']), Http::postAsync('http://easyhttp.gouguoyin.cn/api/sleep2.json', ['name' => 'gouguoyin']),];Http::concurrency(10)->multiAsync($promises, function (Response $response, $index) { echo "發起第 $index 個異步請求,請求時長:" . $response->json()->second . '秒' . PHP_EOL;}, function (RequestException $e, $index) { echo "發起第 $index 個請求失敗,失敗原因:" . $e->getMessage() . PHP_EOL;});//輸出發起第 1 個請求失敗,失敗原因:cURL error 1: Protocol "http1" not supported or disabled in libcurl (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)發起第 2 個異步請求,請求時長:2 秒發起第 0 個異步請求,請求時長:3 秒
2、異步請求時如果沒有請求參數可以省略use Gouguoyin\EasyHttp\Response;use Gouguoyin\EasyHttp\RequestException;Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json', ['token' => TOKEN], function (Response $response) { echo '異步請求成功,響應內容:' . $response->body() . PHP_EOL;}, function (RequestException $e) { echo '異步請求異常,錯誤碼:' . $e->getCode() . ',錯誤信息:' . $e->getMessage() . PHP_EOL;});echo json_encode(['code' => 200, 'msg' => '請求成功'], JSON_UNESCAPED_UNICODE) . PHP_EOL;//輸出{"code":200,"msg":"請求成功"}異步請求成功,響應內容:{"code":200,"msg":"success","second":3}Http::getAsync('http1://easyhttp.gouguoyin.cn/api/sleep3.json', function (Response $response) { echo '異步請求成功,響應內容:' . $response->body() . PHP_EOL;}, function (RequestException $e) { echo '異步請求異常,錯誤信息:' . $e->getMessage() . PHP_EOL;});echo json_encode(['code' => 200, 'msg' => '請求成功'], JSON_UNESCAPED_UNICODE) . PHP_EOL;//輸出{"code":200,"msg":"請求成功"}異步請求異常,錯誤信息:cURL error 1: Protocol "http1" not supported or disabled in libcurl (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
3、新增withUA()方法$response = Http::withUA('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36')->post(...);
4、新增asMultipart()方法,attach()的別名$response = Http::asMultipart( 'file_input_name', file_get_contents('photo1.jpg'), 'photo2.jpg')->post('http://test.com/attachments');$response = Http::asMultipart( 'file_input_name', fopen('photo1.jpg', 'r'), 'photo2.jpg')->post(...);
5、get()、getAsync()方法支持帶參數的url$response = Http::get('http://httpbin.org/get');$response = Http::get('http://httpbin.org/get?name=gouguoyin');$response = Http::get('http://httpbin.org/get?name=gouguoyin', ['age' => 18]);