Update to drupal 8.0.0-rc1. For more information, see https://www.drupal.org/node/2582663
This commit is contained in:
parent
eb34d130a8
commit
f32e58e4b1
8476 changed files with 211648 additions and 170042 deletions
208
vendor/fabpot/goutte/Goutte/Client.php
vendored
Normal file
208
vendor/fabpot/goutte/Goutte/Client.php
vendored
Normal file
|
@ -0,0 +1,208 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Goutte package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Goutte;
|
||||
|
||||
use GuzzleHttp\Client as GuzzleClient;
|
||||
use GuzzleHttp\ClientInterface as GuzzleClientInterface;
|
||||
use GuzzleHttp\Cookie\CookieJar;
|
||||
use GuzzleHttp\Exception\RequestException;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Symfony\Component\BrowserKit\Client as BaseClient;
|
||||
use Symfony\Component\BrowserKit\Request;
|
||||
use Symfony\Component\BrowserKit\Response;
|
||||
|
||||
/**
|
||||
* Client.
|
||||
*
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @author Michael Dowling <michael@guzzlephp.org>
|
||||
* @author Charles Sarrazin <charles@sarraz.in>
|
||||
*/
|
||||
class Client extends BaseClient
|
||||
{
|
||||
protected $client;
|
||||
|
||||
private $headers = array();
|
||||
private $auth = null;
|
||||
|
||||
public function setClient(GuzzleClientInterface $client)
|
||||
{
|
||||
$this->client = $client;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getClient()
|
||||
{
|
||||
if (!$this->client) {
|
||||
$this->client = new GuzzleClient(array('defaults' => array('allow_redirects' => false, 'cookies' => true)));
|
||||
}
|
||||
|
||||
return $this->client;
|
||||
}
|
||||
|
||||
public function setHeader($name, $value)
|
||||
{
|
||||
$this->headers[$name] = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeHeader($name)
|
||||
{
|
||||
unset($this->headers[$name]);
|
||||
}
|
||||
|
||||
public function setAuth($user, $password = '', $type = 'basic')
|
||||
{
|
||||
$this->auth = array($user, $password, $type);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function resetAuth()
|
||||
{
|
||||
$this->auth = null;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
protected function doRequest($request)
|
||||
{
|
||||
$headers = array();
|
||||
foreach ($request->getServer() as $key => $val) {
|
||||
$key = strtolower(str_replace('_', '-', $key));
|
||||
$contentHeaders = array('content-length' => true, 'content-md5' => true, 'content-type' => true);
|
||||
if (0 === strpos($key, 'http-')) {
|
||||
$headers[substr($key, 5)] = $val;
|
||||
}
|
||||
// CONTENT_* are not prefixed with HTTP_
|
||||
elseif (isset($contentHeaders[$key])) {
|
||||
$headers[$key] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
$cookies = CookieJar::fromArray(
|
||||
$this->getCookieJar()->allRawValues($request->getUri()),
|
||||
parse_url($request->getUri(), PHP_URL_HOST)
|
||||
);
|
||||
|
||||
$requestOptions = array(
|
||||
'cookies' => $cookies,
|
||||
'allow_redirects' => false,
|
||||
'auth' => $this->auth,
|
||||
);
|
||||
|
||||
if (!in_array($request->getMethod(), array('GET', 'HEAD'))) {
|
||||
if (null !== $content = $request->getContent()) {
|
||||
$requestOptions['body'] = $content;
|
||||
} else {
|
||||
if ($files = $request->getFiles()) {
|
||||
$requestOptions['multipart'] = [];
|
||||
|
||||
$this->addPostFields($request->getParameters(), $requestOptions['multipart']);
|
||||
$this->addPostFiles($files, $requestOptions['multipart']);
|
||||
} else {
|
||||
$requestOptions['form_params'] = $request->getParameters();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($headers)) {
|
||||
$requestOptions['headers'] = $headers;
|
||||
}
|
||||
|
||||
$method = $request->getMethod();
|
||||
$uri = $request->getUri();
|
||||
|
||||
foreach ($this->headers as $name => $value) {
|
||||
$requestOptions['headers'][$name] = $value;
|
||||
}
|
||||
|
||||
// Let BrowserKit handle redirects
|
||||
try {
|
||||
$response = $this->getClient()->request($method, $uri, $requestOptions);
|
||||
} catch (RequestException $e) {
|
||||
$response = $e->getResponse();
|
||||
if (null === $response) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->createResponse($response);
|
||||
}
|
||||
|
||||
protected function addPostFiles(array $files, array &$multipart, $arrayName = '')
|
||||
{
|
||||
if (empty($files)) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($files as $name => $info) {
|
||||
if (!empty($arrayName)) {
|
||||
$name = $arrayName.'['.$name.']';
|
||||
}
|
||||
|
||||
$file = [
|
||||
'name' => $name,
|
||||
];
|
||||
|
||||
if (is_array($info)) {
|
||||
if (isset($info['tmp_name'])) {
|
||||
if ('' !== $info['tmp_name']) {
|
||||
$file['contents'] = fopen($info['tmp_name'], 'r');
|
||||
if (isset($info['name'])) {
|
||||
$file['filename'] = $info['name'];
|
||||
}
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$this->addPostFiles($info, $multipart, $name);
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$file['contents'] = fopen($info, 'r');
|
||||
}
|
||||
|
||||
$multipart[] = $file;
|
||||
}
|
||||
}
|
||||
|
||||
public function addPostFields(array $formParams, array &$multipart, $arrayName = '')
|
||||
{
|
||||
foreach ($formParams as $name => $value) {
|
||||
if (!empty($arrayName)) {
|
||||
$name = $arrayName.'['.$name.']';
|
||||
}
|
||||
|
||||
if (is_array($value)) {
|
||||
$this->addPostFields($value, $multipart, $name);
|
||||
} else {
|
||||
$multipart[] = [
|
||||
'name' => $name,
|
||||
'contents' => $value,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function createResponse(ResponseInterface $response)
|
||||
{
|
||||
return new Response((string) $response->getBody(), $response->getStatusCode(), $response->getHeaders());
|
||||
}
|
||||
}
|
Reference in a new issue