Open GoogleCodeExporter opened 8 years ago
Correct, they won't return a response BODY, however, they do return an HTTP
status and additional headers, which is what it cares about. ping excerpt:
$httpResponse = $httpTransport->performHeadRequest($this->_pingUrl, $timeout);
$solrResponse = new Apache_Solr_Response($httpResponse,
$this->_createDocuments, $this->_collapseSingleValueArrays);
if ($solrResponse->getHttpStatus() == 200)
{
return microtime(true) - $start;
}
else
{
return false;
}
Have you tried directly getting the admin ping handler for your solr instance?
perhaps your configuration doesn't have it enabled and that's why a ping is
failing. It relies on the admin/ping handler being configured.
Original comment by donovan....@gmail.com
on 16 Jan 2013 at 3:59
thanks for your fast also kind answer. whenever i switch to the
"performGetRequest" ping works flawlessly. is there any kind of setting about
admin/ping to accept HEAD?
Original comment by anilce...@gmail.com
on 16 Jan 2013 at 9:53
interesting. Which of the HTTP transports are you using?
I'll probably double check all of them on my side, but it'll be good to know.
While I'm asking, can you give me the PHP version, just in case.
Original comment by donovan....@gmail.com
on 16 Jan 2013 at 10:38
transport class is the one which uses "file_get_contents" method. it returns
empty body (not false) but does not fills variable $http_response_header. php
version is 5.4.9 i take a look at php changelog also bug reports about this
method but no luck.
if nobody faced this before i have to suspect my platform. i will dig deeper
with stack trace tomorrow.
Original comment by anilce...@gmail.com
on 17 Jan 2013 at 6:39
I have unit tests that cover the head requests for each transport in the tests
directory of the full checkout. If possible, can you try running them? simplest
way is from the checkout root to do: php tests/run.php
you will need phpunit installed, you can find pecl and compose install
instructions on the site: https://github.com/sebastianbergmann/phpunit/ Note:
I personally run phpunit 3.6.11 at the moment.
If you can't run the phpunit, because of the version or trouble installing, I'd
also be interested in you running this test script (expects the Apache
directory of the client to be on the include path):
<?php
require_once('Apache/Solr/HttpTransport/Interface.php');
require_once('Apache/Solr/HttpTransport/Response.php');
require_once('Apache/Solr/HttpTransport/Abstract.php');
require_once('Apache/Solr/HttpTransport/Curl.php');
require_once('Apache/Solr/HttpTransport/CurlNoReuse.php');
require_once('Apache/Solr/HttpTransport/FileGetContents.php');
$implementations = array(
'Apache_Solr_HttpTransport_Curl',
'Apache_Solr_HttpTransport_CurlNoReuse',
'Apache_Solr_HttpTransport_FileGetContents'
);
foreach ($implementations as $implementation) {
$instance = new $implementation();
$response = $instance->performHeadRequest("http://www.google.com");
echo $implementation, "\n";
print_r($response);
echo "\n\n";
}
?>
I got output that looked like this:
Apache_Solr_HttpTransport_Curl
Apache_Solr_HttpTransport_Response Object
(
[_statusCode:Apache_Solr_HttpTransport_Response:private] => 200
[_statusMessage:Apache_Solr_HttpTransport_Response:private] => OK
[_mimeType:Apache_Solr_HttpTransport_Response:private] => text/html
[_encoding:Apache_Solr_HttpTransport_Response:private] => ISO-8859-1
[_responseBody:Apache_Solr_HttpTransport_Response:private] =>
)
Apache_Solr_HttpTransport_CurlNoReuse
Apache_Solr_HttpTransport_Response Object
(
[_statusCode:Apache_Solr_HttpTransport_Response:private] => 200
[_statusMessage:Apache_Solr_HttpTransport_Response:private] => OK
[_mimeType:Apache_Solr_HttpTransport_Response:private] => text/html
[_encoding:Apache_Solr_HttpTransport_Response:private] => ISO-8859-1
[_responseBody:Apache_Solr_HttpTransport_Response:private] =>
)
Apache_Solr_HttpTransport_FileGetContents
Apache_Solr_HttpTransport_Response Object
(
[_statusCode:Apache_Solr_HttpTransport_Response:private] => 200
[_statusMessage:Apache_Solr_HttpTransport_Response:private] => OK
[_mimeType:Apache_Solr_HttpTransport_Response:private] => text/html
[_encoding:Apache_Solr_HttpTransport_Response:private] => ISO-8859-1
[_responseBody:Apache_Solr_HttpTransport_Response:private] =>
)
what'd you get?
Original comment by donovan....@gmail.com
on 17 Jan 2013 at 9:19
Apache_Solr_HttpTransport_Curl
Apache_Solr_HttpTransport_Response Object
(
[_statusCode:Apache_Solr_HttpTransport_Response:private] => 302
[_statusMessage:Apache_Solr_HttpTransport_Response:private] => Found
[_mimeType:Apache_Solr_HttpTransport_Response:private] => text/html
[_encoding:Apache_Solr_HttpTransport_Response:private] => UTF-8
[_responseBody:Apache_Solr_HttpTransport_Response:private] =>
)
Apache_Solr_HttpTransport_CurlNoReuse
Apache_Solr_HttpTransport_Response Object
(
[_statusCode:Apache_Solr_HttpTransport_Response:private] => 302
[_statusMessage:Apache_Solr_HttpTransport_Response:private] => Found
[_mimeType:Apache_Solr_HttpTransport_Response:private] => text/html
[_encoding:Apache_Solr_HttpTransport_Response:private] => UTF-8
[_responseBody:Apache_Solr_HttpTransport_Response:private] =>
)
Apache_Solr_HttpTransport_FileGetContents
Apache_Solr_HttpTransport_Response Object
(
[_statusCode:Apache_Solr_HttpTransport_Response:private] => 0
[_statusMessage:Apache_Solr_HttpTransport_Response:private] => Communication Error
[_mimeType:Apache_Solr_HttpTransport_Response:private] => text/plain
[_encoding:Apache_Solr_HttpTransport_Response:private] => UTF-8
[_responseBody:Apache_Solr_HttpTransport_Response:private] =>
)
Original comment by anilce...@gmail.com
on 18 Jan 2013 at 8:36
Also nothing from stack trace;
request:
HEAD /ew/admin/ping HTTP/1.1\r\nUser-Agent: PHP/5.4.9\r\nHost:
10.231.14.250:8080\r\nAccept: */*\r\n\r\n
response:
HTTP/1.1 200 OK\r\nServer: Apache-Coyote/1.1\r\nContent-Type:
application/xml;charset=UTF-8\r\nContent-Length: 0\r\nDate: Fri, 18 Jan 2013
08:38:45 GMT\r\n\r\n
Original comment by anilce...@gmail.com
on 18 Jan 2013 at 8:47
interestingly when I call"get_headers($url)" in the method
"Apache_Solr_HttpTransport_FileGetContents::performHeadRequest", it populates
the headers plus it fills up the "$http_response_header" auto-magically :D. I
think this bug is for PHP.
Original comment by anilce...@gmail.com
on 18 Jan 2013 at 8:57
https://bugs.php.net/bug.php?id=64016
Original comment by anilce...@gmail.com
on 18 Jan 2013 at 11:20
another thing to quickly check,
http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen
Original comment by donovan....@gmail.com
on 18 Jan 2013 at 3:49
Original issue reported on code.google.com by
anilce...@gmail.com
on 16 Jan 2013 at 8:07