summaryrefslogtreecommitdiffstats
path: root/vendor/gipfl/curl/src/CurlHandle.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gipfl/curl/src/CurlHandle.php')
-rw-r--r--vendor/gipfl/curl/src/CurlHandle.php76
1 files changed, 76 insertions, 0 deletions
diff --git a/vendor/gipfl/curl/src/CurlHandle.php b/vendor/gipfl/curl/src/CurlHandle.php
new file mode 100644
index 0000000..d5309f0
--- /dev/null
+++ b/vendor/gipfl/curl/src/CurlHandle.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace gipfl\Curl;
+
+use Psr\Http\Message\RequestInterface;
+
+class CurlHandle
+{
+ protected static $curlOptions = [
+ CURLOPT_HEADER => true,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_CONNECTTIMEOUT => 5,
+ CURLOPT_SSL_VERIFYPEER => true,
+ CURLOPT_SSL_VERIFYHOST => 2,
+ CURLOPT_ENCODING => 'gzip',
+ CURLOPT_TCP_NODELAY => true,
+ CURLINFO_HEADER_OUT => true,
+ CURLOPT_TCP_KEEPALIVE => 1,
+ CURLOPT_BUFFERSIZE => 512 * 1024,
+ ];
+
+ public static function createForRequest(RequestInterface $request, $curlOptions = [])
+ {
+ $headers = [];
+ foreach ($request->getHeaders() as $name => $values) {
+ foreach ($values as $value) {
+ $headers[] = "$name: $value";
+ }
+ }
+ $body = $request->getBody();
+ if ($body->getSize() > 0) {
+ $body = $body->getContents();
+ } else {
+ $body = null;
+ }
+
+
+ $curl = curl_init();
+ $opts = static::prepareCurlOptions(
+ $request->getMethod(),
+ (string) $request->getUri(),
+ $body,
+ $headers,
+ $curlOptions
+ );
+ curl_setopt_array($curl, $opts);
+
+ return $curl;
+ }
+
+ protected static function prepareCurlOptions($method, $url, $body = null, $headers = [], $curlOptions = [])
+ {
+ $opts = $curlOptions + [
+ CURLOPT_CUSTOMREQUEST => $method,
+ CURLOPT_URL => $url,
+ ] + self::$curlOptions;
+
+ if (isset($opts[CURLOPT_HTTPHEADER])) {
+ $opts[CURLOPT_HTTPHEADER] = array_merge($opts[CURLOPT_HTTPHEADER], $headers);
+ } else {
+ $opts[CURLOPT_HTTPHEADER] = $headers;
+ }
+ if (isset($opts[CURLOPT_PROXYTYPE])
+ && $opts[CURLOPT_PROXYTYPE] === CURLPROXY_HTTP
+ && defined('CURLOPT_SUPPRESS_CONNECT_HEADERS')
+ ) {
+ $opts[CURLOPT_SUPPRESS_CONNECT_HEADERS] = true;
+ }
+
+ if ($body !== null) {
+ $opts[CURLOPT_POSTFIELDS] = $body;
+ }
+
+ return $opts;
+ }
+}