/** * Prepare Request object to send request. * * @param RequestInterface $request The Psr Request object. * @param string $method The method type. * @param string|object $url The URL to request, may be string or Uri object. * @param mixed $data The request body data, can be an array of POST data. * @param array $headers The headers array. * * @return RequestInterface */ protected function prepareRequest(RequestInterface $request, $method, $url, $data, $headers) { $url = (string) $url; // If is GET, we merge data into URL. if (strtoupper($method) == 'GET' && is_array($data)) { $url = new Uri($url); foreach ($data as $k => $v) { $url->setVar($k, $v); } $url = (string) $url; $data = null; } // If not GET, convert data to query string. if (is_array($data)) { $data = UriHelper::buildQuery($data); } /** @var RequestInterface $request */ $request->getBody()->write((string) $data); $request = $request->withRequestTarget((string) new PsrUri($url))->withMethod($method); // Set global headers foreach ((array) $this->getOption('headers') as $key => $value) { $request = $request->withHeader($key, $value); } // Override with this method foreach ($headers as $key => $value) { $request = $request->withHeader($key, $value); } return $request; }
/** * Method to test patch(). * * @return void * * @covers Windwalker\Http\HttpClient::patch */ public function testPatch() { $url = 'http://example.com/?foo=bar'; $data = array('flower' => 'sakura'); $headers = array('X-Foo' => 'Bar'); $this->instance->patch($url, $data, $headers); $this->assertEquals('PATCH', $this->transport->request->getMethod()); $this->assertEquals($url, $this->transport->request->getRequestTarget()); $this->assertEquals('Bar', $this->transport->request->getHeaderLine('X-Foo')); $this->assertEquals(UriHelper::buildQuery($data), $this->transport->request->getBody()->__toString()); }
/** * testRequestPut * * @return void */ public function testRequestPut() { $request = $this->createRequest(); $request = $request->withUri(new PsrUri(WINDWALKER_TEST_HTTP_URL))->withMethod('PUT'); $request->getBody()->write(UriHelper::buildQuery(array('foo' => 'bar'))); $response = $this->instance->request($request); $data = json_decode($response->getBody()->getContents(), true); $this->assertEquals(array('foo' => 'bar'), $data['data']); $this->assertEquals('PUT', $data['_SERVER']['REQUEST_METHOD']); }