如何在curl发送的php文件中处理POST

如何在curl发送的php文件中处理POST

问题描述:

I have created a file on bluehost server test.php and used this file send curl request from another server ( godaddy ).

$url = 'http://dev.testserver.com/test.php';
        $data_string = json_encode($fields);
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_POST, 1); 
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
        curl_setopt($curl, CURLOPT_POSTFIELDS,$data_string );                                                                  
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);                                                                      
        $curl_response = curl_exec($curl);

How to capture posted data on test.php and process it ? I am trying with $_POST but its showing blank.

我在bluehost服务器test.php上创建了一个文件并使用此文件从另一台服务器发送curl请求(godaddy) 。 p>

  $ url ='http://dev.testserver.com/test.php';
 $ data_string = json_encode($ fields); 
 $ curl = curl_init  ($ url); 
 curl_setopt($ curl,CURLOPT_POST,1);  
 curl_setopt($ curl,CURLOPT_CUSTOMREQUEST,“POST”);  
 curl_setopt($ curl,CURLOPT_POSTFIELDS,$ data_string);  
 curl_setopt($ curl,CURLOPT_RETURNTRANSFER,true);  
 $ curl_response = curl_exec($ curl); 
  code>  pre> 
 
 

如何捕获test.php上发布的数据并对其进行处理? 我正在尝试使用$ _POST但它的 显示空白。 p> div>

Try to replace this, direct send array not json

curl_setopt($curl, CURLOPT_POSTFIELDS,$data_string );

With

curl_setopt($curl, CURLOPT_POSTFIELDS,$fields );

Check this : http://php.net/manual/en/function.curl-setopt.php

The question is close to this one How to send raw POST data with cURL? (PHP)

I've slightly modified your client code to follow recommendations:

<?php

$fields = ['a' => 'aaaa', 'b' => 'bbbb'];

$url = 'http://localhost/test.php';
$data_string = json_encode($fields);

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, urlencode($data_string));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$curl_response = curl_exec($curl);

echo 'Response: '.$curl_response.PHP_EOL;

I do urlencode for the sent data and set headers.

The logic how to read data is explained in the question How to get body of a POST in php? I made a simple test.php file with the following code

<?php

$body = file_get_contents('php://input');
if (!empty($body)) {
    $data = json_decode(urldecode($body), true);
    var_export($data);
}

We read the data, decode it and parse JSON.

As one might expect the test output from the client script is the following

$ php client.php 
Response: array (
  'a' => 'aaaa',
  'b' => 'bbbb',
)