gpt4 book ai didi

php - Laravel 不会读取 PUT 请求的 HTTP 请求负载

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:42 26 4
gpt4 key购买 nike

所以我在这里有点磕磕绊绊,因为我发现 PHP 不会从 PUT 请求中读取 HTTP 请求正文。而当请求中的Content-Type header 设置为application/json 时,似乎没有任何方法可以获取正文。

我正在使用 Laravel,它在 Symfony2 的 HttpFoundation 库之上构建了他们的请求层。

我已经用 jQuery 对此进行了一些调试,这些是一些示例请求:

做这样一个请求,我可以通过Input::getContent()找到内容

$.ajax({ 
url: 'http://api.host/profiles/12?access_token=abcdef',
type: 'PUT',
data: {"profiles":[{"name":"yolanda ellis","email":"yolanda.ellis12@example.com"}]}
});

不过,我无法使用 file_get_contents('php://input') 获取内容。 jQuery 默认将数据发送为 application/x-www-form-urlencoded

当我在请求中传递另一个 Content-Type 时,它​​变得更加令人难以置信。就像 Ember-Data 所做的那样:

$.ajax({ 
url: 'http://api.host/profiles/12?access_token=abcdef',
type: 'PUT',
data: {"profiles":[{"name":"yolanda ellis","email":"yolanda.ellis12@example.com"}]},
contentType: 'application/json'
});

这样做时,数据似乎无处可寻。这意味着我的 Ember.js 应用无法与我的 API 一起正常工作。

这到底是怎么回事?

编辑

这是在 Chrome DevTools 中看到的完整请求示例:http://pastebin.com/ZEjDAsmJ

我发现这是 Laravel 特有的问题。

编辑 2:找到答案

我的项目中似乎有一个依赖项,当 Content-Type: application/json header 与请求一起发送时,它从 php://input 读取.这会清除流——正如@Mark_1 提供的链接中所指出的那样——导致它在到达 Laravel 时为空。

依赖是bshaffer/oauth2-server-php

最佳答案

您应该能够在您的代码中使用 Input::json() 来获取 json 解码的内容。

我认为你只能读取一次输入流,所以如果另一个包在你之前读取了输入流,你将无法访问它。

您是否正在使用 OAuth2\Request::createFromGlobals() 创建请求来处理您的 token ?您应该从 Laravel 传入现有的请求对象,这样两者都可以访问内容。你读过这个吗? http://bshaffer.github.io/oauth2-server-php-docs/cookbook/laravel/链接到 https://github.com/bshaffer/oauth2-server-httpfoundation-bridge其中解释了如何从 httpfoundation 请求对象(Laravel 使用)创建请求对象。

像这样:

$bridgeRequest = \OAuth2\HttpFoundationBridge\Request::createFromRequest($request);
$server->grantAccessToken($bridgeRequest, $response);

所以他们共享相同的内容等。

关于php - Laravel 不会读取 PUT 请求的 HTTP 请求负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com