Skip to content

Commit

Permalink
Allow http_build_query() override
Browse files Browse the repository at this point in the history
This seems like the kind of thing that one should never want to do. Unless... you're dealing with a RESTful API that doesn't seem to understand URL parameters that contain numeric indices for the base array. [For example](smtech/canvaspest#3):

Instructure Canvas is expecting URL parameters for arrays that do not include numerical indices:

```
http://canvas-instance.instructure.com/api/v1/courses/123/sections?include[]=students&include[]=enrollments
```

At the same time [`http_build_query()`](https://github.com/smtech/canvaspest/blob/9110d69f756ff49e8da687381eaee52a767c0389/CanvasPest.php#L108) is trying to build legal URL parameters, which require that at least the base URL be indexed, resulting in shenanigans like this:

```
http://canvas-instance.instructure.com/api/v1/courses/123/sections?include%5B0%5D=students&include%5B1%5D=enrollments
```

It appears, at least, that Canvas tolerates URL-encoded arrays, but not the indices, so a request like this would work, allowing the result of `http_build_query()` to be post-processed [as described here](http://php.net/manual/en/function.http-build-query.php#111819):

```
http://canvas-instance.instructure.com/api/v1/courses/123/sections?include%5B%5D=students&include%5B%5D=enrollments
```
  • Loading branch information
battis authored and Seth Battis committed Aug 17, 2015
1 parent fcb539e commit 0fe1348
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions Pest.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,15 @@ public function setupProxy($host, $port, $user = NULL, $pass = NULL)
$this->curl_opts[CURLOPT_PROXYUSERPWD] = $user . ":" . $pass;
}
}

/**
* Allow overriding of `http_build_query()` for idiosyncratic APIs
* @param mixed $data
* @return string
**/
protected function http_build_query($data) {
return http_build_query($data);
}

/**
* Perform HTTP GET request
Expand All @@ -143,7 +152,7 @@ public function get($url, $data = array(), $headers=array())
if ($pos !== false) {
$url = substr($url, 0, $pos);
}
$url .= '?' . http_build_query($data);
$url .= '?' . $this->http_build_query($data);
}

$curl_opts = $this->curl_opts;
Expand Down Expand Up @@ -410,7 +419,7 @@ public function prepData($data)
}
}

return ($multipart) ? $data : http_build_query($data);
return ($multipart) ? $data : $this->http_build_query($data);
} else {
return $data;
}
Expand Down Expand Up @@ -452,7 +461,7 @@ public function put($url, $data, $headers = array())
*/
public function patch($url, $data, $headers = array())
{
$data = (is_array($data)) ? http_build_query($data) : $data;
$data = (is_array($data)) ? $this->http_build_query($data) : $data;

$curl_opts = $this->curl_opts;
$curl_opts[CURLOPT_CUSTOMREQUEST] = 'PATCH';
Expand Down

0 comments on commit 0fe1348

Please sign in to comment.