【问题标题】:Weird libcurl error in PHP (Failed to connect to IPHERE: Unknown error 22)PHP 中出现奇怪的 libcurl 错误(无法连接到 IPHERE:未知错误 22)
【发布时间】:2009-09-06 19:26:50
【问题描述】:

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

   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 请求。

我现在一无所知。

我真的很感激这个。

谢谢。

【问题讨论】:

  • 代码对我有用(页面返回,没有错误),CULOPT_INTERFACE 设置为本地机器的局域网 IP。你检查过 CURLOPT_VERBOSE 的输出和 curl_getinfo() 的返回吗? (我假设“登录失败”来自帖子中没有的代码?)

标签: php curl libcurl


【解决方案1】:

这是我的完整(工作)代码(基本上是你的,但输出更多),希望它会有所帮助:

$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>';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2023-03-29
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2015-10-03
    相关资源
    最近更新 更多