我正在尝试使用以下代码执行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传递给此函数。
答案 0 :(得分: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运行它,您将看到结果。 (请注意,我没有包含结束?&gt;标记。当文件只包含PHP代码而没有HTML时,结束标记是可选的。事实上,建议在这种情况下省略结束标记。请参阅{{ 3}})
请在你的问题代码中注明mainFunction,你在URL中的“pleeze”之前有非法空格,并且你在$ url赋值的末尾错过了分号。
希望这会有所帮助。祝你好运。
答案 1 :(得分: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();
?>
答案 2 :(得分:1)
嘿伙计们我找到了问题......最后......
当我为curl设置CURLOPT_FOLLOWLOCATION时,这工作正常......
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
但是当我在函数中硬编码URL并且在将url作为变量传递给函数时没有设置CURLOPT_FOLLOWLOCATION时,我不清楚为什么它有效?当我设置此选项时它正在工作两种方式..