使用 PHP 从 CURL“-d”检索数据
Retrieve data from CURL "-d" using PHP
这个问题不是关于如何在 PHP 中使用 CURL。但是如何检索使用带“-d”选项的 CURL 发送的数据。
这个命令:
curl -H 'Content-Type: text/plain; charset=utf-8' -d 'Hello, World!' -X POST http://localhost:8080
将在 $_POST 变量中生成空数组。
有人知道吗?谢谢。
我认为这是一个 header 冲突。您尝试发送 text/plain
但不是 form
。
让我们尝试创建一个 php
文件:
<?php
var_dump($_SERVER);
var_dump($_POST);
var_dump(file_get_contents('php://input'));
?>
运行 built-in 服务器 php -S localhost:8000 path_to_file.php
curl -d 'Hello, World!' -X POST http://localhost:8000
# ...
# ["CONTENT_TYPE"]=>
# string(33) "application/x-www-form-urlencoded" < --- FORM
# ["HTTP_CONTENT_TYPE"]=>
# string(33) "application/x-www-form-urlencoded"
# ...
# array(1) { < ---- DATA HERE
# ["Hello,_World!"]=>
# string(0) ""
# }
# string(13) "Hello, World!" < ---- AND INPUT HERE
curl -H 'Content-Type: text/plain; charset=utf-8' -d 'Hello, World!' -X POST http://localhost:8000
# ...
# ["CONTENT_TYPE"]=>
# string(25) "text/plain; charset=utf-8" < ------ TEXT
# ["HTTP_CONTENT_TYPE"]=>
# string(25) "text/plain; charset=utf-8"
# ...
# array(0) { < ---- EMPTY
# }
# string(13) "Hello, World!" < ---- BUT INPUT HERE
让我们尝试发送 multipart/form-data
:
curl -F key1=val1 -F key2=val2 -X POST http://localhost:8000
# ... FORM .......
# ["CONTENT_TYPE"]=>
# string(70) "multipart/form-data; boundary=------------------------2abad5506f8862a5"
# ["HTTP_CONTENT_TYPE"]=>
# string(70) "multipart/form-data; boundary=------------------------2abad5506f8862a5"
# ["REQUEST_TIME_FLOAT"]=>
# ...
# array(2) { < ------ DATA HERE
# ["key1"]=>
# string(4) "val1"
# ["key2"]=>
# string(4) "val2"
# }
# string(0) "" <- BUT INPUT EMPTY
让我们试试 json
:
curl --header "Content-Type: application/json" --request POST --data '{"hey":"joe"}' http://localhost:8000
# array(0) { < ----- EMPTY
# }
# string(13) "{"hey":"joe"}" < ----- INPUT HERE
所以我认为在你的情况下,造成这种行为的主要原因是 request headers
这个问题不是关于如何在 PHP 中使用 CURL。但是如何检索使用带“-d”选项的 CURL 发送的数据。
这个命令:
curl -H 'Content-Type: text/plain; charset=utf-8' -d 'Hello, World!' -X POST http://localhost:8080
将在 $_POST 变量中生成空数组。
有人知道吗?谢谢。
我认为这是一个 header 冲突。您尝试发送 text/plain
但不是 form
。
让我们尝试创建一个 php
文件:
<?php
var_dump($_SERVER);
var_dump($_POST);
var_dump(file_get_contents('php://input'));
?>
运行 built-in 服务器 php -S localhost:8000 path_to_file.php
curl -d 'Hello, World!' -X POST http://localhost:8000
# ...
# ["CONTENT_TYPE"]=>
# string(33) "application/x-www-form-urlencoded" < --- FORM
# ["HTTP_CONTENT_TYPE"]=>
# string(33) "application/x-www-form-urlencoded"
# ...
# array(1) { < ---- DATA HERE
# ["Hello,_World!"]=>
# string(0) ""
# }
# string(13) "Hello, World!" < ---- AND INPUT HERE
curl -H 'Content-Type: text/plain; charset=utf-8' -d 'Hello, World!' -X POST http://localhost:8000
# ...
# ["CONTENT_TYPE"]=>
# string(25) "text/plain; charset=utf-8" < ------ TEXT
# ["HTTP_CONTENT_TYPE"]=>
# string(25) "text/plain; charset=utf-8"
# ...
# array(0) { < ---- EMPTY
# }
# string(13) "Hello, World!" < ---- BUT INPUT HERE
让我们尝试发送 multipart/form-data
:
curl -F key1=val1 -F key2=val2 -X POST http://localhost:8000
# ... FORM .......
# ["CONTENT_TYPE"]=>
# string(70) "multipart/form-data; boundary=------------------------2abad5506f8862a5"
# ["HTTP_CONTENT_TYPE"]=>
# string(70) "multipart/form-data; boundary=------------------------2abad5506f8862a5"
# ["REQUEST_TIME_FLOAT"]=>
# ...
# array(2) { < ------ DATA HERE
# ["key1"]=>
# string(4) "val1"
# ["key2"]=>
# string(4) "val2"
# }
# string(0) "" <- BUT INPUT EMPTY
让我们试试 json
:
curl --header "Content-Type: application/json" --request POST --data '{"hey":"joe"}' http://localhost:8000
# array(0) { < ----- EMPTY
# }
# string(13) "{"hey":"joe"}" < ----- INPUT HERE
所以我认为在你的情况下,造成这种行为的主要原因是 request headers