Recaptcha provides a php library for integration into web applications. Unfortunately, it depends on the web server having unfettered outgoing access to the internet. In a situation where you are forcing outgoing connections to go via proxy (in this case a squid installation), the following modifications should work.
/** * Submits an HTTP POST to a reCAPTCHA server * @param string $host * @param string $path * @param array $data * @param int port * @return array response */ function _recaptcha_http_post($host, $path, $data, $port = 80) { $proxy_host = '@@YOUR_WEB_PROXY_HERE'; $proxy_port=3128; $req = _recaptcha_qsencode ($data); $http_request = "POST http://$host$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($proxy_host, $proxy_port, $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; }
68a69,71 > $proxy_host = '@@YOUR_WEB_PROXY_HERE'; > $proxy_port=3128; > 71c74 < $http_request = "POST $path HTTP/1.0\r\n"; --- > $http_request = "POST http://$host$path HTTP/1.0\r\n"; 80c83 < if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { --- > if( false == ( $fs = @fsockopen($proxy_host, $proxy_port, $errno, $errstr, 10) ) ) {
The entire recaptchalib.php file including the proxy modification