/** * @return string */ public function compile() { $cookies = Helpers::flatMapAssoc($this, function ($value, $keys) { $name = implode('][', array_map('urlencode', $keys)); $name = count($keys) > 1 ? substr_replace($name, '', strpos($name, ']'), 1) . ']' : $name; return $name . '=' . urlencode($value); }); return implode('; ', $cookies); }
/** * @param \Kdyby\Curl\Request $request */ public function request(Curl\Request $request) { $id = md5(serialize($request)); $content = array($request->method . ' ' . $request->getUrl()); foreach ($request->headers as $name => $value) { $content[] = "{$name}: {$value}"; } $content = '> ' . implode("\n> ", $content) . "\n"; Curl\Helpers::flatMapAssoc($request->post + $request->files, function ($val, $keys) use(&$content) { $content .= implode("][", $keys) . ": " . Code\Helpers::dump($val) . "\n"; }); $this->write($content . "\n", $id); return $id; }
/** * @param array|string $post * @param array $files * * @throws NotSupportedException * @return CurlWrapper */ public function setPost($post = array(), array $files = NULL) { if ($files) { if (!is_array($post)) { throw new NotSupportedException("Not implemented."); } array_walk_recursive($files, function (&$item) { if (PHP_VERSION_ID >= 50500) { $pathname = realpath($item); $type = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $pathname); $item = new \CurlFile($pathname, strpos($type, '/') ? $type : 'application/octet-stream', basename($item)); } else { $item = '@' . realpath($item); } }); $post = Nette\Utils\Arrays::mergeTree($post, $files); $this->setHeader('Content-Type', 'multipart/form-data'); } if ($post) { return $this->setOptions(array('post' => TRUE, 'postFields' => is_array($post) ? Helpers::flattenArray($post) : $post)); } return $this->setOptions(array('post' => NULL, 'postFields' => NULL)); }