1<?php
2namespace GuzzleHttp;
3
4use GuzzleHttp\Exception\GuzzleException;
5use GuzzleHttp\Promise\PromiseInterface;
6use Psr\Http\Message\RequestInterface;
7use Psr\Http\Message\ResponseInterface;
8use Psr\Http\Message\UriInterface;
9
10/**
11 * Client interface for sending HTTP requests.
12 */
13interface ClientInterface
14{
15    /**
16     * @deprecated Will be removed in Guzzle 7.0.0
17     */
18    const VERSION = '6.5.5';
19
20    /**
21     * Send an HTTP request.
22     *
23     * @param RequestInterface $request Request to send
24     * @param array            $options Request options to apply to the given
25     *                                  request and to the transfer.
26     *
27     * @return ResponseInterface
28     * @throws GuzzleException
29     */
30    public function send(RequestInterface $request, array $options = []);
31
32    /**
33     * Asynchronously send an HTTP request.
34     *
35     * @param RequestInterface $request Request to send
36     * @param array            $options Request options to apply to the given
37     *                                  request and to the transfer.
38     *
39     * @return PromiseInterface
40     */
41    public function sendAsync(RequestInterface $request, array $options = []);
42
43    /**
44     * Create and send an HTTP request.
45     *
46     * Use an absolute path to override the base path of the client, or a
47     * relative path to append to the base path of the client. The URL can
48     * contain the query string as well.
49     *
50     * @param string              $method  HTTP method.
51     * @param string|UriInterface $uri     URI object or string.
52     * @param array               $options Request options to apply.
53     *
54     * @return ResponseInterface
55     * @throws GuzzleException
56     */
57    public function request($method, $uri, array $options = []);
58
59    /**
60     * Create and send an asynchronous HTTP request.
61     *
62     * Use an absolute path to override the base path of the client, or a
63     * relative path to append to the base path of the client. The URL can
64     * contain the query string as well. Use an array to provide a URL
65     * template and additional variables to use in the URL template expansion.
66     *
67     * @param string              $method  HTTP method
68     * @param string|UriInterface $uri     URI object or string.
69     * @param array               $options Request options to apply.
70     *
71     * @return PromiseInterface
72     */
73    public function requestAsync($method, $uri, array $options = []);
74
75    /**
76     * Get a client configuration option.
77     *
78     * These options include default request options of the client, a "handler"
79     * (if utilized by the concrete client), and a "base_uri" if utilized by
80     * the concrete client.
81     *
82     * @param string|null $option The config option to retrieve.
83     *
84     * @return mixed
85     */
86    public function getConfig($option = null);
87}
88