Commit Graph

80 Commits

Author SHA1 Message Date
Fabien Potencier
0219834a2d bug #32141 [HttpClient] fix dealing with 1xx informational responses (nicolas-grekas)
This PR was merged into the 4.3 branch.

Discussion
----------

[HttpClient] fix dealing with 1xx informational responses

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

I never had a look at 1xx status codes until today.
This PR fixes reading them when using curl.

If one wonders:
- `NativeHttpClient` uses `fopen()`, which skips informational parts as allowed by the HTTP spec and doesn't give any way to access their response headers.
- `CurlHttpClient` allows reading informational responses using the progress callback or via the getInfo() method. That's the way if you need to implement e.g. HTTP 103 early hints.

Commits
-------

412411d795 [HttpClient] fix dealing with 1xx informational responses
2019-06-26 09:29:23 +02:00
Nicolas Grekas
c5c3332400 [HttpClient] fix timing measurements with NativeHttpClient 2019-06-24 10:59:29 +02:00
Nicolas Grekas
412411d795 [HttpClient] fix dealing with 1xx informational responses 2019-06-23 19:42:15 +02:00
Nicolas Grekas
dc55cf826a [HttpClient] fixing passing debug info to progress callback 2019-06-18 14:13:04 +02:00
Fabien Potencier
99c44a3836 bug #32065 [HttpClient] throw DecodingExceptionInterface when toArray() fails because of content-type error (nicolas-grekas)
This PR was merged into the 4.3 branch.

Discussion
----------

[HttpClient] throw DecodingExceptionInterface when toArray() fails because of content-type error

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #31913
| License       | MIT
| Doc PR        | -

As spotted in the linked issue, we are missing this type of exception. It's a bug at the contracts level.

Commits
-------

3f167417fb [HttpClient] throw DecodingExceptionInterface when toArray() fails because of content-type error
2019-06-17 18:35:34 +02:00
Nicolas Grekas
3f167417fb [HttpClient] throw DecodingExceptionInterface when toArray() fails because of content-type error 2019-06-16 20:17:37 +02:00
Nicolas Grekas
a2960a3318 [HttpClient] Don't use CurlHttpClient on Windows when curl.cainfo is not set 2019-06-13 14:16:31 +02:00
Fabien Potencier
9526988eca fixed CS 2019-06-13 13:03:18 +02:00
Nicolas Grekas
21857a1edb [HttpClient] fix closing debug stream prematurely 2019-06-12 15:33:27 +02:00
Nicolas Grekas
4a7989456b [HttpClient] fix Psr18Client handling of non-200 response codes 2019-06-10 19:33:33 +02:00
Fabien Potencier
e5b082acee bug #31850 [HttpClient] add $response->cancel() (nicolas-grekas)
This PR was merged into the 4.3 branch.

Discussion
----------

[HttpClient] add $response->cancel()

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/11668

An alternative to #31845 and #31842.
Same as  #31831 but considered as a bug fix (at the Contracts level), thus for 4.3.
I think we're early enough since 4.3/1.1 to do it.
That will save us some headaches in the short term.

Commits
-------

c402418723 [HttpClient] add $response->cancel()
2019-06-05 15:19:12 +02:00
Nicolas Grekas
846116edab [HttpClient] revert bad logic around JSON_THROW_ON_ERROR 2019-06-05 13:58:47 +02:00
Fabien Potencier
d90dd8da98 bug #31834 [HttpClient] Don't throw InvalidArgumentException on bad Location header (nicolas-grekas)
This PR was merged into the 4.3 branch.

Discussion
----------

[HttpClient] Don't throw InvalidArgumentException on bad Location header

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #31776
| License       | MIT
| Doc PR        | -

Instead, just stop following redirections and throw a `RedirectionExceptionInterface` as usual when throwing is not disabled.

Commits
-------

4acca42330 [HttpClient] Don't throw InvalidArgumentException on bad Location header
2019-06-05 04:18:50 +02:00
Nicolas Grekas
42904e34e6 [HttpClient] work around PHP 7.3 bug related to json_encode() 2019-06-04 21:00:49 +02:00
Nicolas Grekas
c402418723 [HttpClient] add $response->cancel() 2019-06-04 13:36:30 +02:00
Nicolas Grekas
4acca42330 [HttpClient] Don't throw InvalidArgumentException on bad Location header 2019-06-04 10:32:15 +02:00
Nicolas Grekas
4fce813ed0 [HttpClient] fix unregistering the debug buffer when using curl 2019-06-04 08:38:41 +02:00
Nicolas Grekas
da85b48c32 [HttpClient] remove unused argument 2019-05-30 18:27:37 +02:00
Nicolas Grekas
0da213711c Merge branch '4.2' into 4.3
* 4.2:
  Use willReturn() instead of will(returnValue()).
2019-05-30 18:10:05 +02:00
Javier Eguiluz
2da9e3f717 [HttpClient] Minor fix in an error message 2019-05-30 11:47:28 +02:00
Nicolas Grekas
1214609b37 [HttpClient] make $response->getInfo('debug') return extended logs about the HTTP transaction 2019-05-28 10:25:44 +02:00
Nicolas Grekas
0a640c53cb Reference individual contracts packages 2019-05-27 10:16:38 +02:00
Nicolas Grekas
812b0172f4 [HttpClient] fix handling exceptions thrown before first mock chunk 2019-05-24 16:45:54 +02:00
Nicolas Grekas
ce26936730 [HttpClient] fix test 2019-05-24 10:15:37 +02:00
Nicolas Grekas
3273109cbe [HttpClient] display proper error message on TransportException when curl is used 2019-05-23 08:55:10 +02:00
Gawain Lynch
4ea7283138
[HttpClient] Only use CURLMOPT_MAX_HOST_CONNECTIONS & CURL_VERSION_HTTP2 if defined
- CURLMOPT_MAX_HOST_CONNECTIONS is available since PHP 7.0.7 and cURL 7.30.0
 - CURL_VERSION_HTTP2 is available since PHP 5.5.24 and 5.6.8 and cURL 7.33.0
2019-05-22 06:50:01 +02:00
Andriy Prokopenko
1cbefd7fca [HttpClient] Allow arrays as query parameters 2019-05-21 18:51:43 +02:00
Nicolas Grekas
964acd9110 [HttpClient] add missing argument check 2019-05-19 11:37:13 -03:00
Nicolas Grekas
7a53e8d3f9 Merge branch '4.2' into 4.3
* 4.2:
  [Routing] Fixed unexpected 404 NoConfigurationException
  [DI] Removes number of elements information in debug mode
  [Contracts] Simplify implementation declarations
  Update PR template for 4.3
  [Intl] Add FallbackTrait for data generation
  [Console] Commands with an alias should not be recognized as ambiguous
  clarify the possible class/interface of the cache
2019-05-09 11:33:12 +02:00
Nicolas Grekas
3aaa742d40 [HttpClient] fix skipping h2push test case 2019-04-28 23:09:39 +02:00
Fabien Potencier
9edd84bce0 bug #30967 [HttpClient] Document the state object that is passed around by the HttpClient (derrabus)
This PR was merged into the 4.3-dev branch.

Discussion
----------

[HttpClient] Document the state object that is passed around by the HttpClient

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | N/A
| License       | MIT
| Doc PR        | N/A

In an attempt to make the code of the new HttpClient component more understandable, I've introduced internal classes that document the `$multi` object that is being passed around between *Client and *Response classes.

My goal is to make the code more accessible to potential contributors and static code analyzers.

Commits
-------

20f4eb3204 Document the state object that is passed around by the HttpClient.
2019-04-12 11:04:34 +02:00
Pol Dellaiera
526cad6909 Make sure that logged URL is the same as the one which is requested. 2019-04-11 09:17:46 +02:00
Giso Stallenberg
601adf5de7 [HttpClient] Do not allow setting both json and body 2019-04-10 17:10:32 +02:00
Alexander M. Turek
20f4eb3204 Document the state object that is passed around by the HttpClient. 2019-04-10 13:03:42 +02:00
Pol Dellaiera
e77108d24e [HttpClient] Add tests - update code style nits. 2019-04-09 11:46:29 +02:00
Fabien Potencier
6a5de47ed7 bug #31028 Fixes unmapped parameter for an error message in HttpClientTrait (dbrumann)
This PR was merged into the 4.3-dev branch.

Discussion
----------

Fixes unmapped parameter for an error message in HttpClientTrait

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | ---
| License       | MIT
| Doc PR        | ---

Commits
-------

b9e2046821 Fixes sprintf unmapped parameter.
2019-04-09 08:06:22 +02:00
Denis Brumann
b9e2046821
Fixes sprintf unmapped parameter. 2019-04-08 21:51:36 +02:00
Théo FIDRY
fbd439e0bd [HttpClient] Allow the HTTP_PROXY environment variable lookup with phpdbg 2019-04-08 17:24:39 +02:00
Alexander M. Turek
69f0a0b3bf Removed undefined variable. 2019-04-06 20:38:25 +02:00
Amrouche Hamza
4fc603327d
minor: remove the logger as it seems uneeded 2019-04-06 11:23:31 +02:00
Grégoire Pineau
098a7ac1af [HttpClient] Adjust logger messages and levels 2019-04-05 16:18:29 +02:00
Nicolas Grekas
26d15c8bbe [HttpClient] log requests, responses and pushes when they happen 2019-04-05 13:59:27 +02:00
Anton Chernikov
fc6ba7efad [HttpClient] logger integration 2019-04-04 13:03:55 +02:00
Fabien Potencier
8da76862fa feature #30843 [HttpClient] Add ScopingHttpClient::forBaseUri() + tweak MockHttpClient (nicolas-grekas)
This PR was merged into the 4.3-dev branch.

Discussion
----------

[HttpClient] Add ScopingHttpClient::forBaseUri() + tweak MockHttpClient

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

This allows creating scoped HTTP clients in one line:

```php
$client = ScopingHttpClient::forBaseUri($client, 'http://example.com');
```

`$client` now resolves relative URLs using the provided base URI.

If one also adds default options as 3rd argument, these will be applied conditionally when a URL matching the base URI is requested.

This PR also tweaks `MockHttpClient` to make it return `MockResponse` on its own when no constructor argument is provided, easing tests a bit.

Commits
-------

2b9b8e5707 [HttpClient] Add ScopingHttpClient::forBaseUri() + tweak MockHttpClient
2019-04-03 12:40:25 +02:00
Nicolas Grekas
2b9b8e5707 [HttpClient] Add ScopingHttpClient::forBaseUri() + tweak MockHttpClient 2019-04-03 11:54:40 +02:00
Nicolas Grekas
f1a26b9aea [FrameworkBundle] change the way http clients are configured by leveraging ScopingHttpClient 2019-04-03 10:47:24 +02:00
Nicolas Grekas
0b21268bf5 [HttpClient][Contracts] rename "raw_headers" to "response_headers" 2019-04-02 12:06:39 +02:00
Nicolas Grekas
162d5a8272 feature #30752 [HttpClient] use "nyholm/psr7" by default in Psr18Client (nicolas-grekas)
This PR was merged into the 4.3-dev branch.

Discussion
----------

[HttpClient] use "nyholm/psr7" by default in Psr18Client

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

This makes the factory arguments of `Psr18Client` optional, with a fallback to using `Nyholm\Psr7\Factory\Psr17Factory` when no factories are provided.

Commits
-------

f2222e4bf5 [HttpClient] use "nyholm/psr7" by default in Psr18Client
2019-03-28 17:44:24 +01:00
Nicolas Grekas
f2222e4bf5 [HttpClient] use "nyholm/psr7" by default in Psr18Client 2019-03-28 17:41:24 +01:00
Nicolas Grekas
332a88c8ce [HttpClient] correctly clean state on destruct in CurlResponse 2019-03-28 16:53:35 +01:00