【问题标题】:Sending and receiving $_POST through curl通过 curl 发送和接收 $_POST
【发布时间】:2015-03-21 21:30:43
【问题描述】:

我正在尝试编写一个简化的中间层,它转发从前端收到的 $_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 并回显 $_POST 的 php 文件(用于检查是否正确接收)。

<?php

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

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

?>

当我在我的网络服务器上运行它时,我只会得到“Hello world”。为了取回响应用户名/密码,我需要更改什么?

【问题讨论】:

  • “让他们回来”是什么意思?您将它们发送到 nirwana,因为 'url' 肯定不是有效的 url。但即使 if 您会在那里使用有效的 url,您也会将这些值发布到该 url。你为什么要收到他们返回?这是一个很好的例子,为什么跳过错误处理不是一个好主意。错误处理会显示您的 curl 请求由于您选择的 url 而失败。还可以查看错误日志文件。
  • Url 将是我发布的第二个 php 文件的 url。通常我会收到诸如数据库对密码和用户名的特定组合的响应是否有效。我只是在这里回显用户名/密码,只是为了检查接收端是否正在获取 POST 字段。很抱歉给您留下了错误的印象。
  • 您需要了解CURLOPT_POSTFIELDS 期望的格式...

标签: php post curl


【解决方案1】:

它需要一个查询,而不是一个数组,像这样:

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

见:http://php.net/manual/en/function.http-build-query.php

【讨论】:

  • 仍然只是“hello world”
【解决方案2】:

我发现这个对于发送标准 $_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"];}

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多