通过curl发送和接收$ _POST

时间:2015-03-21 21:30:44

标签: php post curl

我正在尝试编写一个简化的中间层,它转发从前端收到的$ _POST并返回从服务器端收到的响应。

以下是我发送$ _POST的PHP:

<?php
$username= 'testuser';
$password = '123' ;
$fields = array('username' => $username, 'password' => $password);
echo 'hello world' ; //checking
$url = 'url';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

这是接收curl的php文件,只是回显$ _POST(用于检查是否正确接收)。

<?php

if (isset($_POST["username"]) && !empty($_POST["username"])) {
    echo $_POST["username"];}

if (isset($_POST["password"]) && !empty($_POST["password"])) {
    echo $_POST["password"];}

?>

当我在我的网络服务器上运行时,我只是得到了#34; Hello world&#34;背部。为了获得响应用户名/密码,我需要更改什么?

2 个答案:

答案 0 :(得分:0)

它需要一个查询,而不是一个数组,如下所示:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));

请参阅:http://php.net/manual/en/function.http-build-query.php

答案 1 :(得分:0)

我发现这个非常有用的教程可以发送标准的$ _POST请求并显示它们的输出:http://davidwalsh.name/curl-post

这是我的程序,它将$ _POST字段转发到另一个php文件,发送的PHP程序:

<?php
//mid1.php
$username= 'testuser';
$password = '123' ;
$url = 'https://xxxx/mid2.php';
$fields = array('username' => urlencode($username),'password' => urlencode($password));
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
curl_close($ch);
?>

这是接收POST的php程序,只是回应:

<?php
//mid2.php

if (isset($_POST["username"]) && !empty($_POST["username"])) {
    echo $_POST["username"];}

if (isset($_POST["password"]) && !empty($_POST["password"])) {
    echo $_POST["password"];}

?>