WordPress.org

Make WordPress Core

#23310 closed defect (bug) (fixed)

WP_Http_Curl doesn't return errors for non-blocking requests

Reported by: SergeyBiryukov Owned by: dd32
Milestone: 3.6 Priority: normal
Severity: normal Version:
Component: HTTP API Keywords: has-patch
Focuses: Cc:

Description

Noticed while debugging #23133.

If a server blocks local connections, WP_Http_Streams and WP_Http_Fsockopen return errors for both blocking and non-blocking requests:

WP_Http_Streams: Could not open handle for fopen() to ...
WP_Http_Fsockopen: "110: Connection timed out"

WP_Http_Curl, however, just returns an empty response, which makes debugging more difficult:
http://core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/class-http.php#L1145

The actual error message that curl_error() returned was "couldn't connect to host".

Attachments (1)

23310.patch (1.5 KB) - added by SergeyBiryukov 15 months ago.

Download all attachments as: .zip

Change History (6)

SergeyBiryukov15 months ago

comment:1 SergeyBiryukov15 months ago

23310.patch also closes the handle before returning from the function, which seems the correct thing to do, according to the example on http://php.net/manual/en/function.curl-error.php.

comment:2 follow-up: dd3215 months ago

How long does the functions take to execute with that change? I mean, Does the function still return almost instantly, or does it sit around and wait for the HTTP connection to do something?

comment:3 in reply to: ↑ 2 rmccue15 months ago

Replying to dd32:

How long does the functions take to execute with that change? I mean, Does the function still return almost instantly, or does it sit around and wait for the HTTP connection to do something?

AFAIK, curl_error() will only give you the connection errors when using non-blocking requests, so it's only an instant socket error. I haven't tested this thoroughly though.

comment:4 dd3214 months ago

  • Milestone changed from Awaiting Review to 3.6

Until we support proper non-blocking curl requests, this seems sane and brings it in line with the other transports. It doesn't appear to affect the response times (curl still parses the response before returning in either case, so we might as well use the output).

comment:5 dd3214 months ago

  • Owner set to dd32
  • Resolution set to fixed
  • Status changed from new to closed

In 23607:

WP_HTTP: Return error responses from cURL for non-blocking requests. Contrary to popular belief, cURL's non-blocking requests are not exact non-blocking, we still wait for cURL to make the request before returning, so making this change aids in development debugging. Props SergeyBiryukov Fixes #23310

Note: See TracTickets for help on using tickets.