ReCAPTCHA

Re: ReCAPTCHA

от Сергей Буянов -
Количество ответов: 0
Вчера стало посвободней со временем, и я решил добить эту проблему. Вот результаты:
Оказалось, что на новом сервере некорректно работает функция
function _recaptcha_http_post() из recaptchalib.php (директория lib)
Точнее эта функция вызывает download_file_content() из filelib.php
Результат вызова оказывался False.
Для проверки работоспособности своего сервиса
ReCAPTCHA распространяет тестовый код http://recaptcha.googlecode.com/files/recaptcha-php-1.10.zip
Он оказался работающим и на новом сервере, и на старом.
Когда я заменил function _recaptcha_http_post(), все заработало!
было
стало
$req = _recaptcha_qsencode ($data);

$headers = array();
$headers['Host'] = $host;
$headers['Content-Type'] = 'application/x-www-form-urlencoded';
$headers['Content-Length'] = strlen($req);
$headers['User-Agent'] = 'reCAPTCHA/PHP';

$results = download_file_content("$protocol://" . $host . $path, $headers, $data, false, 300, 20, true);

if ($results) {
return array(1 => $results);
} else {
return false;
}
$req = _recaptcha_qsencode ($data);

$http_request = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $host\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
$http_request .= "Content-Length: " . strlen($req) . "\r\n";
$http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
$http_request .= "\r\n";
$http_request .= $req;
$response = '';
if( false == ( $fs = @fsockopen($host, 80, $errno, $errstr, 10) ) ) {
die ('Could not open socket');
}

fwrite($fs, $http_request);

while ( !feof($fs) )
$response .= fgets($fs, 1160); // One TCP-IP packet
fclose($fs);
$response = explode("\r\n\r\n", $response, 2);

return $response;
Вопрос: в чем была необходимость и преимущества реализации обмена данными через функцию download_file_content?