Scalr\Service\Azure\Client\QueryClient::prepareRequest PHP Метод

prepareRequest() публичный Метод

См. также: Scalr\Service\Azure\Client\ClientInterface::prepareRequest()
public prepareRequest ( $path, $method, $apiVersion, $baseUrl = Azure::URL_MANAGEMENT_WINDOWS, $queryData = [], $postFields = [], $headers = [] )
    public function prepareRequest($path, $method, $apiVersion, $baseUrl = Azure::URL_MANAGEMENT_WINDOWS, $queryData = [], $postFields = [], $headers = [])
    {
        if (!in_array($method, static::$httpMethods)) {
            throw new InvalidArgumentException(sprintf('Http method %s not supported or not exists.', $method));
        }
        try {
            $url = $baseUrl . $path;
            $parts = parse_url($url);
            if (isset($parts['query'])) {
                parse_str($parts['query'], $query);
            }
            if (!isset($query['api-version'])) {
                $queryData['api-version'] = $apiVersion;
            }
            $request = new Request($method, $url);
            $proxySettings = $this->azure->getProxy();
            if ($proxySettings !== false) {
                $request->setOptions(['proxyhost' => $proxySettings['host'], 'proxyport' => $proxySettings['port'], 'proxytype' => $proxySettings['type']]);
                if ($proxySettings['user']) {
                    $request->setOptions(['proxyauth' => "{$proxySettings['user']}:{$proxySettings['pass']}", 'proxyauthtype' => $proxySettings['authtype']]);
                }
            }
            $request->addQuery($queryData);
            if ($baseUrl === Azure::URL_MANAGEMENT_WINDOWS) {
                $headers['Content-Type'] = 'application/json';
            }
            if (empty($headers['Authorization']) && $baseUrl === Azure::URL_MANAGEMENT_WINDOWS) {
                $headers['Authorization'] = 'Bearer ' . $this->azure->getClientToken(Azure::URL_MANAGEMENT_WINDOWS)->token;
            }
            if (count($postFields)) {
                $request->append(json_encode($postFields));
            } else {
                if ($method == 'POST' && !isset($headers['Content-Length'])) {
                    // pecl_http does not include Content-Length for empty posts what breaks integration with Azure.
                    $headers['Content-Length'] = 1;
                    $request->append(" ");
                } else {
                    if (in_array($method, ['PUT', 'PATCH']) && !isset($headers['Content-Length'])) {
                        // pecl_http does not include Content-Length for empty posts what breaks integration with Azure.
                        $headers['Content-Length'] = 0;
                    }
                }
            }
            if (count($headers)) {
                $request->addHeaders($headers);
            }
        } catch (Exception $e) {
            throw new AzureException($e->getMessage());
        }
        return $request;
    }