在PHP中获取curl post的数据

时间:2018-12-18 04:36:56

标签: php codeigniter curl

我正在尝试通过使用带有codeigniter的curl将数据发送到url。我已经成功实现了用于发送数据的代码,如下所示。

function postToURL($reg_no, $data)
{
    $url = 'http://localhost/abcSystem/Web_data/viewPage';

    $send_array = array(
        'reg_no' =>$reg_no,
        'data' =>$data,
    );

    $fields_string = http_build_query($send_array);

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 600);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, $url);

    $post_data = 'json='.urlencode(json_encode($send_array));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

    $output = curl_exec($ch);

    if (curl_errno($ch)) {
        die('Couldn\'t send request: ' . curl_error($ch));
    } else {
        $resultStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($resultStatus == 200) {
            print_r('success'); // this is outputting
            return $output;
        } else {
            die('Request failed: HTTP status code: ' . $resultStatus);
        }
    }
    curl_close($ch);
}

输出为成功。我想看看是否可以检索此帖子数据。因此,我尝试如下更改上述网址控制器文件。

$fp = fopen('php://input', 'r');
$rawData = stream_get_contents($fp);
echo "<pre>";
print_r($rawData);
echo "</pre>";

但是什么都没打印。我想获取发布数据。请帮助我。

3 个答案:

答案 0 :(得分:1)

您的书面代码

$fp = fopen('php://input', 'r');
$rawData = stream_get_contents($fp);
echo "<pre>";
print_r($rawData);
echo "</pre>";

不是要打印或捕获已发布数据。因为您正在处理当前页面PHP INPUT流,而您正在其他URL上发布数据。因此,您需要做的就是将已发布数据的日志放入“文件”中。在$ output = curl_exec($ ch)

之后使用以下代码
file_put_contents("posted_data.txt", $post_data );

这样,您将可以在文件Postd_data.txt文件中写入您的每个帖子-确保您具有适当的文件权限。如果您要跟踪每个POST,而不仅仅是使文件名动态化,以便每个API调用都可以编写日志。

另一种选择是将$ post_data保存在DATABASE中-从安全性的角度来看这是不建议的。

答案 1 :(得分:1)

//API URL
$url = 'http://www.yourDomainNAme.com/api';

//create a new cURL resource
$ch = curl_init($url);

//setup request to send json via POST
$data = array(
    'username' => 'infinityknow',
    'password' => '9898123456789'
);
$payload = json_encode(array("user" => $data));

//attach encoded JSON string to the POST fields
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

//set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));

//return response instead of outputting
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//execute the POST request
$result = curl_exec($ch);

//close cURL resource
curl_close($ch);

//Receive JSON POST Data using PHP
$data = json_decode(file_get_contents('php://input'), true);

POST and Receive JSON Data using PHP cURL

答案 2 :(得分:0)

无论您在哪里调用postToURL()函数,都需要输出它的结果。

例如:

$output = postToURL('Example', array());
echo $output;

这是因为您正在返回而不是输出curl输出。