3

我正在尝试使用以下代码执行 curl。

mainFunction{
  .
  .
  $url = strtolower($request->get('url', NULL));
  $html_output= $this->startURLCheck($url);
  .
  .
}

function startURLCheck($url)
{
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 $html_output = curl_exec($ch);
}

当我直接给出字符串 URL 时,这工作正常。但是后来我通过一个函数 curl 没有执行字符串数据。curl_error 也没有显示错误。我为字符串尝试了许多编码和解码方法,结果相同。我做错了吗?我在 Windows 上使用 XAMPP 服务器。

在从另一个函数中的 HTML 发布请求获取 URL 后,我将 URL 传递给该函数。

4

3 回答 3

2

问题是您的函数 startURLCheck 实际上并没有返回一个值供主程序使用。更改最后一行:

function startURLCheck($url)
{
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    return curl_exec($ch);
}

在您的调用代码中,取出“$this->”

$html_output = startURLCheck($url);

$html_output 现在包含 curl 调用的结果。

我假设您从某个地方复制并粘贴了此代码,因为您的“mainFunction”声明在语法上不正确,并且您使用了“$this->”而没有指定 startURLCheck 是一个对象的方法。

如果实际上您希望 startURLCheck 成为对象方法,并且希望它在对象上设置 $html_output,请执行以下操作:

<?php

class Example {
    private $html_output;

    function mainFunction()
    { 
        $url='http://www.ebay.com/itm/Apple-iPhone-5-16GB-Black-Slate-Cricket-intl-UNLOCKED-pleeze-read-ad-/251252227033';
        $this->startURLCheck($url);
        echo "HTML output: " . $this->html_output;
    }

    function startURLCheck($url)
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        $this->html_output = curl_exec($ch);
    }
}

$example = new Example();
$example->mainFunction();

我已经在命令行(不在网页中)测试了这段代码。如果您将其复制并粘贴到文件中并使用 php -r 运行它,您将看到结果。(请注意,我没有包含结束 ?> 标记。当文件仅包含 PHP 代码而没有 HTML 时,结束标记是可选的。事实上,在这种情况下建议省略结束标记。参见http:// /php.net/manual/en/language.basic-syntax.instruction-separation.php )

另请注意,在您的 mainFunction 问题代码中,您的 URL 中“pleeeze”之前有非法空格,并且您在 $url 分配末尾缺少分号。

希望这可以帮助。祝你好运。

于 2013-03-29T05:41:41.583 回答
1

这很好用。

<?php
function excURL()
{
 $ch = curl_init();
 $url = "http://www.google.com";
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 $html_output = curl_exec($ch);
 echo $html_output;
}

excURL();

?>
于 2013-03-28T18:23:47.933 回答
1

嘿伙计们,我发现了问题..终于..

当我为 curl 设置 CURLOPT_FOLLOWLOCATION 时,这工作正常......

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

但是仍然不清楚为什么当我在函数内硬编码 URL 时它起作用,而当我将 url 作为变量传递给函数时它不起作用,而没有设置 CURLOPT_FOLLOWLOCATION ...当我设置这个选项时,它在两种方式下都起作用。 .

于 2013-03-29T06:31:17.963 回答