Was ist das Blockieren von fsockopen?
Nach einem halben Tag schaffe ich es endlich, reCAPTCHA zum Laufen zu bringen, indem ich diese Funktion konvertiere:
<code>function _recaptcha_http_post($host, $path, $data, $port = 80) { $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, $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; } </code>
zu:
<code>function _recaptcha_http_post($host, $path, $data, $port = 80) { $req = _recaptcha_qsencode ($data); $request = curl_init("http://".$host.$path); curl_setopt($request, CURLOPT_USERAGENT, "reCAPTCHA/PHP"); curl_setopt($request, CURLOPT_POST, true); curl_setopt($request, CURLOPT_POSTFIELDS, $req); curl_setopt($request, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($request); return $response; } </code>
Grundsätzlich interessiert mich, warumcurl
funktioniert währendfsockopen
schlägt fehl mit "Socket konnte nicht geöffnet werden". Vielen Dank.
In Ergänzung: Sockets-Unterstützung ist aktiviert.