无法使用 PHP 解析 `Content-Disposition: form-data` 负载

问题描述 投票:0回答:1

我已经阅读了很多关于这个主题的帖子,但看起来它们都与我的背景无关。

我有一个 JS 库,它向后端发送包含以下格式数据的 POST 请求:

------WebKitFormBoundaryDjoP6y6CoTH58A26
Content-Disposition: form-data; name="data"

[{ <JSON formatted data> }}]
------WebKitFormBoundaryDjoP6y6CoTH58A26--

我知道,因为我使用过浏览器检查器。我的问题是我无法获取这些数据。传统的

file_get_contents('php://input')
返回一个空字符串。尝试使用
apache_request_headers()
进一步调查,这就是后端收到的内容:

Array
(
    [Cookie] => PHPSESSID=e8tlf5aocqmb5eu2qliu7pnkl4; arpadmin=s1pg7pg31kl2e9sj96kg2arqc4; __gsas=ID=6ed6b402c3253656:T=1702304073:RT=1702304073:S=ALNI_Mbb4fbtcgyhQiVS58b1D5bl7hnPmA
    [Accept-Language] => en-US,en;q=0.9,it;q=0.8
    [Accept-Encoding] => gzip, deflate
    [Referer] => http://myhostname.mydomain.org/arp/lat.php?mese=1&anno=2024
    [Origin] => http://myhostname.mydomain.org
    [Content-Type] => multipart/form-data; boundary=----WebKitFormBoundaryEAp4qyLXkJs3nO4a
    [User-Agent] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
    [X-Requested-With] => XMLHttpRequest
    [Dnt] => 1
    [Cache-Control] => no-cache
    [Pragma] => no-cache
    [Accept] => application/json
    [Content-Length] => 368
    [Connection] => keep-alive
    [Host] => myhostname.mydomain.org
)

我的数据在哪里?

javascript php xmlhttprequest
1个回答
0
投票

将 JSON 提交到 API 端点的最直接方法是使用

Content-Type: application/json
,这需要从
php://input
读取原始数据并自行解析。但你的 JavaScript 库没有使用它。它使用 HTML 表单支持的两种经典格式之一,PHP 会自动解码为
$_POST
:

  • application/x-www-form-urlencoded
  • multipart/form-data
    <-- This is yours

您的原始 JSON 将在

$_POST['data']
处提供,并对其应用 json_decode() 应该会获得预期的数据...除非请求是其他内容,例如 PATCH 或 PUT(如果不确定,请检查
$_SERVER['REQUEST_METHOD']
)。

© www.soinside.com 2019 - 2024. All rights reserved.