Search code examples
phpcurlcommand-line-interface

How to send PHP input stream data using curl?


POST

On my local machine, I want to use cURL as an HTTP client like so:

curl -X POST -F 'email=derp@example.com' -F 'password=blink182' http://example.com

The above curl statement uses the HTTP POST method which can be retrieved in PHP like so:

echo $_POST['email'];       // derp@example.com
echo $_POST['password'];    // blink182

php://input

However, what I really wanted is the data from the PHP input stream php:://input and not from the POST method $_POST.

The PHP input stream can be retrieved in PHP like so:

$input = json_decode( file_get_contents( 'php://input' ) );
echo $input->email;     // derp@example.com
echo $input->password;  // blink182

Which brings me to my question, how to send PHP input stream data using curl?


Solution

  • From the PHP website:

    php://input is a read-only stream that allows you to read raw data from the request body. php://input is not available with enctype="multipart/form-data".

    So if you specify the Content-Type as application/json using -H "Content-Type: application/json" you ought to get it in the input stream

    complete example:

    curl -X POST https://reqbin.com/echo/post/json
       -H 'Content-Type: application/json'
       -d {\"email\":\"derp@example.com\",\"password\":\"blink182\"}