【问题标题】:unable to send data using CURLOPT_POST to other php file无法使用 CURLOPT_POST 将数据发送到其他 php 文件
【发布时间】:2016-04-25 09:23:22
【问题描述】:

我是 php 新手,我正在尝试使用 curl(抓取)从网站获取数据,

无法使用 CURLOPT_POST 将数据从 index.php 获取到 data.php.. 我做错了什么..?

index.php

<?php
$data = array("name"=>"john","age"=>31);
$string = http_build_query($data);

echo $string;

$ch = curl_init("http://localhost/scrap_practise/data.php");
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);

?>

data.php

<?php 
echo 'finlly in'; // this never echos 
if(isset($_POST['name'],$_POST['age'])){
    $db = new Mysqli("localhost","root","","mydb");
    $name = $db->real_escape_string($_POST['name']);
        $age = (int) $_POST['age'];
        $query = "INSERT INTO data SET data='$name,$age'";
        $db->query($query);

}

?>

【问题讨论】:

  • 在变量 $result = curl_exec($ch); 中分配 curl 并打印结果 print_r($result); 以检查错误,但您的代码工作正常,我认为问题在于您的主机名它是 localhost 而不是 loclhost
  • 使用curl_setopt($ch, CURLOPT_URL, Your Url);
  • @manjeet barnala- 不,但它甚至没有回显 data.php 中的代码,data.php 中的第一行是 `echo 'finlly in' ., 它没有显示

标签: php curl web-scraping


【解决方案1】:

只需使用这行代码更新index.php 脚本。

index.php

<?php
$data = array("name"=>"john","age"=>31);
$string = http_build_query($data);

echo $string;

$ch = curl_init("http://localhost/scrap_practise/data.php");
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if( ! $result = curl_exec($ch))
{ 
    trigger_error(curl_error($ch)); 
} 
curl_close($ch);

// to see the return result uncomment the below line code.
//print_r($result);
?>

有关更多选项或功能参考,请参阅此链接 - http://php.net/manual/en/function.curl-exec.php

希望这将有助于解决您的问题!

【讨论】:

  • 兄弟,这行得通,我现在可以看到 data.php 中的回声,但这对我来说没有任何意义。如何..? if 语句如何产生影响.. 加上我仍然无法看到数据库中的数据(尽管我会解决它,在这种情况下的帮助将不胜感激)
  • 我认为是因为 print_r($result);
  • @Bawa,函数curl_exec() 成功返回TRUE,失败返回FALSE。但是,如果设置了 CURLOPT_RETURNTRANSFER 选项,它将在成功时返回结果,FALSE 在失败时返回。
【解决方案2】:

试试这个代码,我希望它对你有用...

<?php
$url = 'http://localhost/scrap_practise/data.php';

$data = array("name"=>"john","age"=>31);

$string = http_build_query($data);

echo $string;

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
print_r($result) ; 

curl_close($ch);

?>

在data.php文件中

<?php 
echo 'finlly in'; // this never echos 
if(isset($_POST['name'],$_POST['age']))
{
   echo "<pre>"; print_r($_POST);
}
?>

这将输出:

finlly in
Array
(
    [name] => john
    [age] => 31
)

【讨论】:

  • 这也行得通,兄弟,但我只能标记一个答案正确。 :) 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2015-01-03
  • 2016-08-20
  • 1970-01-01
  • 2017-03-19
相关资源
最近更新 更多