0

我正在完成我的脚本,突然 libcurl 停止工作。我以为我正在连接的服务器已关闭或其他原因,但总是在我尝试连接的地方遇到同样糟糕的错误。我什至尝试重新启动我的盒子,结果相同。发生事情的代码片段是:

   public function navigate(array $data)
    {
        $ch = curl_init();

        // Setup cURL
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_INTERFACE, $data['ip']);
        curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookies.jar");
        curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookies.jar");
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $data['agent']);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        // Visit homepage
        curl_setopt($ch, CURLOPT_URL, "SOMEWEBSITEHERE, MAKES NO DIFFERENCE");
$page=        curl_exec($ch);
var_dump($page, curl_error($ch), curl_errno($ch));
    }

上面的 var_dump() 将产生这个输出(以 www.yahoo.com 作为 URL):

bool(false)
string(51) "Failed to connect to 69.147.76.15: Unknown error 22"
int(7)
Login failed!

我什至尝试用wireshark嗅探连接,cURL甚至不发出连接请求;只有一个 DNS 请求。

我现在一头雾水。

我真的很感激这个。

谢谢。

4

1 回答 1

1

Here's my complete (working) code (essentially yours, but with more output), in hopes it will help:

$url = 'www.yahoo.com';
$data['ip'] = $_SERVER['SERVER_ADDR'];
$cookie_jar = sys_get_temp_dir() . 'cookiejar.txt';
$data['agent'] = 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8';

$fp = fopen('php://temp', 'r+');
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_INTERFACE, $data['ip']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $data['agent']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $fp);
$page   = curl_exec($ch);
$errno  = curl_errno($ch);
$errmsg = curl_error($ch);
$info   = curl_getinfo($ch);
curl_close($ch);
rewind($fp);
$verbose = fread($fp, 8192);
fclose($fp);

echo '<pre>';
echo 'Error number: ' . $errno . '<br />';
echo 'Error message: ' . $errmsg . '<br />';
echo '------------------' . '<br />';
print_r($info);
echo '------------------' . '<br />';
echo $verbose . '<br />';
echo '------------------' . '<br />';
echo htmlspecialchars($page);
echo '</pre>';
于 2009-09-07T02:20:27.443 回答