sesser/scurl

使用 PHP curl 函数进行 HTTP 请求的小型库封装

1.0.4 2013-02-08 16:56 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:18:07 UTC


README

Build Status

Scurl 是一个易于使用的 PHP 库,用于发起 HTTP 请求。它需要 PHP >= 5.4 和 curl 扩展。该库符合 PSR-0 标准,并包含一个 composer 文件,以便轻松将其包含到您的项目中。

如何包含

使用 Composer

将以下内容添加到您的项目中的 composer.json 文件中

{
	"require": {
		"sesser/scurl": "1.*"
	}
}

然后确保包含您的 vendor/autoload.php 文件。

不使用 Composer

<?php
	include_once 'src/Sesser/Scurl/Scurl.php';
?>

##快速入门##

Scurl 很简单。它支持主要的调用(GET、POST、PUT、DELETE、HEAD)。在最基本的情况下,您可以这样发起一个 GET 请求

<?php
	$scurl = new Sesser\Scurl\Scurl;
	$response = $scurl->get('http://www.google.com');
	echo $response->body;
?>

对于更复杂的调用,如向服务器 PUT 对象

<?php
	$scurl = new Sesser\Scurl\Scurl;
	$response = $scurl->put('http://api.awesomeapi.net/v1/upload/file.png', [], [
	  'data' => '/full/path/to/file.png'
	]);
?>

PUT json 数据(以及可能 xml 数据,尽管未测试)也是可能的

<?php
	$scurl = new Sesser\Scurl\Scurl;
	$response = $scurl->put('http://api.awesomeapi.net/v1/update', [ 'param' => 'value'], [
		'data' => '{"data": { "foo": "bar" }}',
		'headers' => ['Content-type' => 'application/json']
	]);
?>

##事件##

Scurl 也支持基本的事件,因此您可以在请求发送之前修改 Request 对象。或者,您可以在请求发送后修改/读取 Response。这可以用于记录请求或跟踪从服务器获取响应所需的时间。

目前,只有两个事件被调用;Scurl::EVENT_BEFOREScurl::EVENT_AFTER。它们分别在请求发送之前和响应接收之后被调用。事件是按堆栈顺序从上到下(先进先出)调用的,因此您可以为事件分配多个回调。请看下面的示例

<?php
	$scurl = Sesser\Scurl\Scurl::getInstance();
	$after_hash = $scurl->addListener(Sesser\Scurl\Scurl::EVENT_AFTER, function(Sesser\Scurl\Request $request, Sesser\Scurl\Response $response) {
		//-- Do some magic here... inspect the request headers, log the url and time it took, etc
	});
?>

Scurl::addListener 方法返回此事件回调的指针。如果您出于某种原因想从调用堆栈中删除监听器,只需调用 Scurl::removeListener 方法即可。

<?php
	$scurl = Sesser\Scurl\Scurl::getInstance();
	$scurl->removeListener(Sesser\Scurl\Scurl::EVENT_AFTER, $after_hash);
?>

请注意,如果传递给 addListener 的事件不是有效事件或回调不可调用,则 addListener 将返回 false,表示未成功注册事件。还有一个尚未实现的其他事件;Sesser\Scurl\Scurl::EVENT_ERROR。该事件将很快可用,并在 curl 层出现错误时被调用。该方法签名应如下所示

<?php function($errNo, $errMessage, Sesser\Scurl\Request $request); ?>

##长篇大论##

Scurl 只是对 Request 类的封装,执行了大部分繁重的工作。当您实例化一个 Scurl 对象时,您可以传递一个配置选项数组。这些选项对所有使用该对象的调用都有效 除非 您在特定调用中覆盖了它们。传递给 __construct 的配置将与以下默认值合并

<?php
$defaults = [
	'method' => Request::METHOD_GET,
	'auth' => [
		'user' => '',
		'pass' => ''
	],
	'data' => '',
	'parameters' => [],
	'cookie' => [],
	'headers' => [
		'Connection'	 =>  'keep-alive',
		'Keep-Alive'	 => 300,
		'Accept-Charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
		'Accept-Language' => 'en-us,en;q=0.5'			
	],
	'options' => [
		'user-agent' => 'Scurl/1.0; PHP/' . PHP_VERSION . ' (+http://github.com/sesser/scurl)',
		'timeout' => 10,
		'connect_timeout' => 2,
		'follow_location' => TRUE,
		'max_redirects' => 3
	],
];
?>

配置说明

$defaults['method']:HTTP 方法。这通常在每个请求中都会被覆盖,但您可以设置一个默认值。

$defaults['auth']:您可以在这里添加您的身份验证凭据或在每个请求的基础上通过简单地将其添加到 $url 中(例如 http://<user>:<pass>@somehost.com

$defaults['data']:这用于 PUT 请求

$defaults['parameters']:请求中传递的默认参数

$defaults['cookie']:设置此值以在请求中传递cookie。这是一个键/值对数组或字符串值('foo=bar; uid=1234')

$defaults['headers']:请求中发送的头部信息。

$defaults['options']:通用选项