我一直试图让curl从表单中发送GET方法。我构建了URL,其中包含所有连接的表单数据。如果我直接在地址栏中输入get请求它可以工作,但不能使用curl。如果我回显$ data,我会收到一条错误,指出“找不到对象!”我尝试显示curl_error()内容并返回空。非常感谢大家的帮助。
这是我到目前为止所做的:
$url = complete url of get request that works when directly placed into adress bar
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec ($ch);
curl_close ($ch);
echo $data;
感谢您帮助我。我尝试了以下代码,它确实说“成功”。当我回显$ data时,我看到一瞬间的“成功”,然后我得到“找不到对象!”错误。
$url = complete url of get request that works when directly placed into adress bar
$ch = curl_init($url);
if ($ch) {
echo "Success";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec ($ch);
curl_close ($ch);
}
else {
echo "Could not initialize curl session";
}
我可能会收到错误,因为我转发GET的链接会将其转发到另一个链接以处理数据。
答案 0 :(得分:2)
尝试添加
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
这应该强制它将数据作为字符串返回而不是输出它。
有关详细信息,请参阅the documentation。
答案 1 :(得分:0)
尝试使用CURLOPT_RETURNTRANSFER选项:
$ch = curl_init();
$url = complete url of get request that works when directly placed into adress bar
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec ($ch);
curl_close ($ch);
echo $data;
答案 2 :(得分:0)
我相信你错过了一个初始化会话的curl_init。
使用建议的代码进行修改
尝试复制并粘贴以下代码:
$url = complete url of get request that works when directly placed into adress bar
$ch = curl_init($url);
if ($ch) {
echo "Success";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec ($ch);
curl_close ($ch);
echo $data;
}
else {
echo "Could not initialize curl session";
}
如果卷曲会话成功初始化,请告诉我们。
答案 3 :(得分:0)
我遇到了同样的问题并按如下方式解决了这个问题:
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS , null );
curl_setopt($ch, CURLOPT_POST , 0);
curl_setopt($ch, CURLOPT_HTTPGET , TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT , 4);
curl_setopt($ch, CURLOPT_USERAGENT , "" );
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_URL , $url );
$rgxrData = curl_exec($ch); // rgxrData stands for response get xml raw Data
echo "Get curl_errno = " ;
echo curl_errno($ch) ;
if (curl_errno($ch)) {
$error_message = curl_error($ch);
$error_no = curl_errno($ch);
echo "error_message: " . $error_message . "<br>";
echo "error_no: " . $error_no . "<br>";
}
curl_close($ch);
return $rgxrData;
请务必按照正确的重置顺序从帖子中获取。即首先将postfields设置为null,然后将其发布为0,然后将httpget设置为true。一旦你设置了这个,那么你可以放心,服务器将开始准备下一个请求,就像get请求一样。此后,设置选项的其余部分和URL(以及所有参数)。这将确保正确地生成和执行get请求。
希望这会有所帮助......
答案 4 :(得分:0)
请尝试使用http_build_query()函数创建查询字符串,我认为这会有所帮助,在我的情况下是有效的