alixaxel/curly

PHP 的并行 cURL 包装器

dev-master 2014-09-17 16:24 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:59:31 UTC


README

Build Status

#curly

PHP 的并行 cURL 包装器

##要求

  • PHP 5.4+
  • cURL 扩展

##安装(通过 Composer)

在您的 composer.json 文件中添加以下依赖项

{
	"require": {
		"alixaxel/curly": "*"
	}
}

然后只需运行 composer installcomposer update

##使用(单个请求)

<?php

use alixaxel\curly\CURL;

$url = 'http://httpbin.org/post',
$data = [
	'foo' => sprintf('@', __FILE__),
	'bar' => 'baz',
];

var_dump(CURL::Uni($url, $data, 'POST'));

##使用(多个请求)

<?php

use alixaxel\curly\CURL;

$url = 'http://httpbin.org/post',
$data = [
	'foo' => sprintf('@', __FILE__),
	'bar' => 'baz',
];

$handles = [];

for ($i = 0; $i < 16; ++$i)
{
	$handles[$key = uniqid()] = CURL::Uni($url, $data, 'POST', null, null, 0);
}

$parallel = 4; // number of requests to make in parallel
$throttle = 1; // wait at least 1 second per each $parallel requests

print_r(CURL::Multi($handles, null, $parallel, $throttle)); // original keys are preserved

##使用(带有回调的多个请求)

<?php

use alixaxel\curly\CURL;

$url = 'http://httpbin.org/post',
$data = [
	'foo' => sprintf('@', __FILE__),
	'bar' => 'baz',
];

$handles = [];

for ($i = 0; $i < 16; ++$i)
{
	$handles[$key = uniqid()] = CURL::Uni($url, $data, 'POST', null, null, 0);
}

$parallel = 4; // number of requests to make in parallel
$throttle = 1; // wait at least 1 second per each $parallel requests

$result = CURL::Multi($handles, function ($response, $info, $id) {
	var_dump($id, $response);
}, $parallel, $throttle);

print_r($result); // each key will have the return value of the lambda callback 

##变更日志

  • 0.1.0 初始版本
  • 0.2.0 添加 XPathify() 工具方法

##鸣谢

XPathify() 基于 visionmedia/php-selector.

##许可(MIT)

版权所有 (c) 2014 Alix Axel (alix.axel+github@gmail.com).