【问题标题】:Retrieve data from CURL "-d" using PHP使用 PHP 从 CURL “-d” 中检索数据
【发布时间】:2021-01-26 12:59:20
【问题描述】:

这个问题不是关于如何在 PHP 中使用 CURL。但是如何检索使用带有“-d”选项的 CURL 发送的数据。

这个命令:

curl -H 'Content-Type: text/plain; charset=utf-8' -d 'Hello, World!' -X POST http://localhost:8080

将在 $_POST 变量中生成空数组。

有人知道吗?谢谢。

【问题讨论】:

  • 请分享更多细节,例如您使用的代码和您期望的结果

标签: php curl http-headers http-post


【解决方案1】:

我认为这是标题冲突。您尝试发送text/plain,但不是form

让我们尝试创建一个php 文件:

<?php
var_dump($_SERVER);
var_dump($_POST);
var_dump(file_get_contents('php://input'));
?>

运行内置服务器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

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 2015-12-10
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2012-12-25
    • 2014-02-10
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多