【问题标题】:How to send JSON POST requests in PHP using variables from another POST requests?如何使用来自另一个 POST 请求的变量在 PHP 中发送 JSON POST 请求?
【发布时间】:2014-11-19 09:43:30
【问题描述】:

我必须向 API 发送多个 JSON POST 和 PUT 请求。 这些 POST 和 PUT 请求必须在填写具有特定信息的表单时发送。 因此,我使用 HTML 创建了一个表单,它将标准 POST 请求(不是 JSON)发送到 PHP 页面。 这是 HTML:

<!DOCTYPE html>
<html>
<body>

<form action="test1.php" method="post" target="_blank">
 Server 1 IP Address: <input type="text" name="1st_server_ip"><br>
 Server 1 Name: <input type="text" name="1st_server_name"><br>
 Server 2 IP Address: <input type="text" name="2nd_server_ip"><br>
 Server 2 Name: <input type="text" name="2st_server_name"><br>
 Farm Name: <input type="text" name="fname"><br>
 Virtual Server IP Address: <input type="text" name="vip"><br>
 Virtual Server Port: <input type="text" name="vport"><br>
 Timeout: <input type="text" name="tmout"><br>
  <input type="submit" value="Submit">
</form>

</body>
</html>

现在,我需要这个 PHP 页面来执行多个 JSON POST 和 PUT 请求,基于来自表单的 POST 请求中的变量。 例如:

The "Server 1 IP Address" will be 1.1.1.1.
The "Server 1 Name" will be S1.
The "Server 2 IP Address" will be 2.2.2.2.
The "Server 2 Name" will be S2.
The "Farm Name" will be Test_Farm.
The "Virtual Server IP Address" will be 3.3.3.3.
The "Virtual Server Port" will be 80.
The "Timeout" will be 6.

PHP 脚本必须发送以下 JSOT POST 或 PUT 请求:

POST:
https://<Server_IP>/config/SlbNewCfgEnhRealServerTable/<value from "Server 1 Name"> ----> That is, "S1".


    {
    "State":"2"
    "IpAddr":"<value from "Server 1 IP Address">" ----> That is, "1.1.1.1".
    }

POST:
https://<Server_IP>/config/SlbNewCfgEnhRealServerTable/<value from "Server 2 Name"> ----> That is, "S2".

    {
    "State":"2"
    "IpAddr":"<value from "Server 2 IP Address">" ----> That is, "2.2.2.2".
    }

POST:
https://<Server_IP>/config/SlbNewCfgEnhGroupTable/<value from "Farm Name"> -----> That is, "Test_Farm".

    {
    "AddServer":"<value from "Server 1 Name">" -----> That is, "S1".
    "AddServer":"<value from "Server 2 Name">" -----> That is, "S2".
    }

POST:
https://<Server_IP>/config/SlbNewCfgEnhVirtServerTable/<value from "Farm Name"> -----> That is, "Test_Farm".

    {
    "VirtServerIpAddress":"<value from "Virtual Server IP Address">" -----> That is, "3.3.3.3".
    "VirtServerState":"2"
    }

POST:
https://<Server_IP>/config/SlbNewCfgEnhVirtServicesTable/<value from "Farm Name">/1

    {
    "VirtPort":"<value from "Virtual Server Port">" -----> That is, "80".
    }

PUT:
https://<Server_IP>/config/SlbNewCfgEnhVirtServicesSixthPartTable/<value from "Farm Name">/1

    {
    "TimeOut":"<value from "Timeout">" -----> That is, "6".
    }

PUT:
https://<Server_IP>/config/SlbNewCfgEnhVirtServicesSeventhPartTable/<value from "Farm Name">/1

    {
    "RealGroup":"<value from "Farm Name">" ----> That is, "Test_Farm".
    }

POST
https://<Server_IP>/config?action=apply

POST
https://<Server_IP>/config?action=save

是否有人知道如何创建一个 PHP 脚本,该脚本将在收到来自 HTML 表单的另一个 POST 请求时发送所有这些 POST 和 PUT 请求,并且知道如何从 HTML 表单发送的一个 POST 请求中插入正确的值?

来自 HTML 表单的 POST 正文应如下所示:

1st_server_ip=1.1.1.1&1st_server_name=S1&2nd_server_ip=2.2.2.2&2nd_server_name=S2&fname=Test_Farm&vip=3.3.3.3&vport=80&tmout=6

因此,PHP 脚本应该能够获取正确的变量并将其放在 JSON HTTP POST 中的正确位置。 例如,从“1st_server_ip=1.1.1.1”中取出“1.1.1.1”,从“1st_server_name=S1”中取出“S1”,放入:

POST
https://<Server_IP>/config/SlbNewCfgEnhRealServerTable/S1

    {
    "State":"2"
    "IpAddr":"1.1.1.1"
    }

提前致谢,Udi Dahan。

【问题讨论】:

  • 所以......真正的问题承认这个问题的怪物是how do I execute a POST request from a PHP script using JSON as the data。正确的?如果是这样的话。答案是 cURL,你的问题是 asked and answered before
  • 对,但是在你建议的链接上,有一个静态的 JSON 数据。我问如何配置PHP脚本以从HTML表单发送的POST数据中获取数据并将其发送到JSON数据中。谢谢。
  • 传递动态数据而不是静态数据?我真的没有看到这个问题。循环post数组,抽象元素,创建新数组,json编码,作为$data参数传递。

标签: php html json


【解决方案1】:

你会使用 curl:

$cu = curl_init();

//Set the server you're "posting" to
curl_setopt($cu, CURLOPT_URL,"http://the_constructed_url");
curl_setopt($cu, CURLOPT_POST, 1); //use "POST" method
curl_setopt($cu, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2");

//Want response
curl_setopt($cu, CURLOPT_RETURNTRANSFER, true);

//Get response
$res = curl_exec ($cu);

curl_close ($cu);

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 2011-08-04
    • 2021-11-30
    • 2017-07-13
    • 2014-05-09
    • 2021-01-09
    相关资源
    最近更新 更多