2014-09-24 116 views
0

我必須向API發送多個JSON POST和PUT請求。 這些POST和PUT請求必須在填寫具有特定信息的表單時發送。 因此,我使用HTML創建了一個表單,該表單將標準的POST請求(不是JSON)發送到PHP頁面。 下面是HTML:如何使用來自其他POST請求的變量在PHP中發送JSON POST請求?

<!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腳本,將發送所有這些POST和PUT請求從HTML表單接收到另一個POST請求,並且知道要從HTML表單發送的POST請求中插入正確的值?

POST正文從HTML表單來的預期如下所示:

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_name = S1」 採取 「1.1.1.1」,從 「1st_server_ip = 1.1.1.1」 和 「S1」,並把它們在:

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

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

感謝提前,烏迪大漢。

+0

所以... admist這個怪物一個問題,真正的問題是,'我該如何執行使用JSON作爲data' PHP腳本POST請求。正確?如果是這樣。答案是cURL,你的問題已被[問及之前回答](http://stackoverflow.com/questions/18647611/posting-json-data-to-api-using-curl) – Ohgodwhy 2014-09-24 19:14:38

+0

對,但在鏈接上建議,有一個靜態的JSON數據。 我問如何將PHP腳本配置爲從HTML表單發送的POST數據中獲取數據並將其發送到JSON數據中。 謝謝。 – 2014-09-24 19:21:12

+0

傳遞動態數據而不是靜態?我真的不明白這個問題。循環post數組,抽象元素,創建新數組,json對其進行編碼,並將其作爲'$ data'參數傳遞。 – Ohgodwhy 2014-09-24 19:21:59

回答

1

你會捲曲使用:

$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);