Bug #67584 [NEW]: Misleading error in pecl_http 2.0.x

From: Date: Mon, 07 Jul 2014 13:40:18 +0000
Subject: Bug #67584 [NEW]: Misleading error in pecl_http 2.0.x
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-186501@lists.php.net to get a copy of this message
From:             marcus at synchromedia dot co dot uk
Operating system: OS X
PHP version:      5.4.30
Package:          HTTP related
Bug Type:         Bug
Bug description:Misleading error in pecl_http 2.0.x

Description:
------------
I'm using pecl_http 2.0.x. I'm issuing multiple requests in one go using
enqueue, and if a transfer fails it throws an exception which I catch
and ignore because the details of it will be revealed when inspecting
Responses afterwards. So I loop over the responses provided by the
client, all of which are http\Response instances, and yet I receive this
error when calling getResponseCode:

PHP Warning:  http\Message::getResponseCode(): http\Message is not if
type response

(note the mis-spelling of 'of', probably makes it easier to track down).
So the http\Client::getResponse is returning http\Response objects as
expected, but when I call a method on one to get its status, it
complains that it's another type??

It's hard to tell what it's meant to be doing because the Response class
is almost entirely undocumented:
http://devel-m6w6.rhcloud.com/mdref/http/Client/Response

Test script:
---------------
<?php
$urls = array(
	'http://www.apple.com/',
	'http://www.google.com/',
	'http://www.googlesdfasdfsadfsdf.com/'
);
$client = new http\Client;
$client->setOptions(array(
	'timeout' => 5,
	'connecttimeout' => 5,
));
foreach ($urls as $url) {
	$client->enqueue(new http\Client\Request('GET', $url));
}
try {
	//Issue all the requests
	$client->send();
} catch (http\Exception $e) {
	//Ignore exceptions - they will have bad response codes too
}
//Parse responses
while ($response = $client->getResponse()) {
	echo get_class($response)."\n";
	$url = $response->getTransferInfo('effective_url');
	if ($response->getResponseCode() == 200) {
		$e = $response->getBody();
		//echo $e;
	}
}


Expected result:
----------------
I'm not sure what it's meant to do because it's not documented, but it
certainly shouldn't be breaking weirdly like this.

Actual result:
--------------
http\Client\Response
http\Client\Response
http\Client\Response
PHP Warning:  http\Message::getResponseCode(): http\Message is not if
type response in test.php on line 25

-- 
Edit bug report at https://bugs.php.net/bug.php?id=67584&edit=1
-- 



Thread (12 messages)

« previous php.bugs (#186501) next »