我正在尝试通过使用带有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>";
但是什么都没打印。我想获取发布数据。请帮助我。
答案 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);
答案 2 :(得分:0)
无论您在哪里调用postToURL()
函数,都需要输出它的结果。
例如:
$output = postToURL('Example', array());
echo $output;
这是因为您正在返回而不是输出curl输出。