如何在Laravel中获取HTTP请求正文内容?

贝尼兹

我正在使用制作API,Laravel 5并且正在使用进行测试PHPUnit我需要测试旧功能的兼容性,这是XML POST。截至目前,我的第一个测试如下所示:

public function testPostMessages()
{
    $response = $this->call('POST', 'xml');

    $this->assertEquals(200, $response->getStatusCode());
}

这一切都很好。我列表上的下一个实际上是通过POST发送XML数据。因此,对于第二项测试,我有:

public function testPostMessagesContent()
{
    $response = $this->call('POST', 'xml');

    $this->assertTrue(is_valid_xml($response->getContent()));
}

该测试失败。但是,我没有发送XML数据。如何发送XML?
现在,在那之后,我需要添加功能以从请求中获取内容。我知道有一个Request可以与之交互对象,但我不完全知道该调用哪种方法。如何从控制器内部获取XML?


更新#1

同时,我能够得到一些结果。我当前的测试如下:

public function testPostMessagesContent()
{
    $response = $this->call('POST', 'xml', array('key' => 'value'), array(), array(), array('content' => 'content'));
    $this->assertContains('~', $response->getContent());
}

我只有波浪号,因为我知道它不匹配,这样我就可以看到整个响应。XmlController.php我有:

class XmlController extends Controller {
public function index(Request $request)
{
    return $request;
    }
}

我的输出PHPUnit如下:

1) XmlTest::testPostMessagesContent
Failed asserting that 'POST xml HTTP/1.1
Accept:          text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Language: en-us,en;q=0.5
Content-Type:    application/x-www-form-urlencoded
Host:            localhost
User-Agent:      Symfony/2.X
' contains "~".

我的参数和内容在哪里?我觉得我只是在call()错误地使用


更新#2

我将控制器更新为Request:all()如下所示:

class XmlController extends Controller
{
    public function index()
   {
        $content = Request::all();
        return $content;
    }
}

这返回了我的键值对,但没有返回内容。

1) XmlTest::testPostMessagesContent
Failed asserting that '{"key":"value"}' contains "~".

键值对很好;这是进步。但是,我真正需要的是内容,因为我将在请求的内容部分中接收该数据。如果我使用,Request::getContent()我会返回一个空白字符串。这是我在测试中的电话:

$response = $this->call('POST', 'xml', array('key' => 'value'), array(), array(), array('content' => 'content'));

这是我的测试结果:

1) XmlTest::testPostMessagesContent
Failed asserting that '' contains "~".

更新#3

我根本无法获得HTTP请求的内容主体。由于XML无法正常工作,因此我继续使用JSON的API的REST部分。这是我的测试之一:

public function testPostMessagesContent()
{
    $response = $this->call('POST', 'messages', ['content' => 'content']);

    $this->assertEquals('saved!', $response->getContent());
}

该测试通过。如果使用curl,我也会接到一个成功的电话:

curl -X POST -d "content=my_new_content" "http://localhost:8000/messages"

返回'saved!'的结果太棒了,但是,如果我尝试在独立的PHP脚本中使用curl(模拟客户端),则会返回以下内容:

Array ( [url] => http://localhost:8000/messages [content_type] => text/html; charset=UTF-8 [http_code] => 302 [header_size] => 603 [request_size] => 118 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.063977 [namelookup_time] => 0.000738 [connect_time] => 0.000866 [pretransfer_time] => 0.000943 [size_upload] => 12 [size_download] => 328 [speed_download] => 5126 [speed_upload] => 187 [download_content_length] => -1 [upload_content_length] => 12 [starttransfer_time] => 0.057606 [redirect_time] => 0 [certinfo] => Array ( ) [primary_ip] => ::1 [primary_port] => 8000 [local_ip] => ::1 [local_port] => 63248 [redirect_url] => http://localhost:8000 [request_header] => POST /messages HTTP/1.1 Host: localhost:8000 Accept: */* Content-type: text/xml Content-length: 12 ) Redirecting to http://localhost:8000. 

这是我的curl命令,添加POST字段:

curl_setopt($ch, CURLOPT_POSTFIELDS, 'content=test');

在我看来,POSTFIELDS已添加到请求的正文中。在这种情况下,我仍然有同样的问题。我无法获取HTTP标头的正文内容。注释掉我的验证后,我得到:

Array ( [url] => http://localhost:8000/messages [content_type] => text/html; charset=UTF-8 [http_code] => 200 [header_size] => 565 [request_size] => 118 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.070225 [namelookup_time] => 0.000867 [connect_time] => 0.00099 [pretransfer_time] => 0.001141 [size_upload] => 12 [size_download] => 6 [speed_download] => 85 [speed_upload] => 170 [download_content_length] => -1 [upload_content_length] => 12 [starttransfer_time] => 0.065204 [redirect_time] => 0 [certinfo] => Array ( ) [primary_ip] => ::1 [primary_port] => 8000 [local_ip] => ::1 [local_port] => 63257 [redirect_url] => [request_header] => POST /messages HTTP/1.1 Host: localhost:8000 Accept: */* Content-type: text/xml Content-length: 12 ) saved!

所以我有我的'saved!'信息。伟大的!但是,现在我的数据库中有一个空白行。不是很好。它仍然没有看到正文内容,只是标题。


回答标准

我正在寻找以下问题的答案:

  1. 为什么我无法获取请求的正文内容?
  2. 如何获取请求的正文内容?
gandra404

内部控制器注入请求对象。因此,如果要访问控制器方法'foo'中的请求主体,请执行以下操作:

public function foo(Request $request){
    $bodyContent = $request->getContent();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Spring Boot Filter中获取HTTP请求正文内容?

来自分类Dev

如何在单元测试中验证Flurl Http中的请求正文内容?

来自分类Dev

如何在Google Cloud Functions中获取HTTP请求正文大小?

来自分类Dev

如何在 Beanshell 预处理器中获取 HTTP POST 请求正文?

来自分类Dev

如何仅从GET HTTP请求中获取消息正文?

来自分类Dev

如何在Matlab中设置http发布请求的正文

来自分类Dev

在Phoenix中获取原始HTTP请求正文

来自分类Dev

http获取正文请求

来自分类Dev

如何在 Laravel 中验证 HTTP 请求

来自分类Dev

如何使用 httptools 从请求中获取正文?

来自分类Dev

如何在芬奇中绑定请求正文

来自分类Dev

如何在 Elasticsearch 中减少请求正文

来自分类Dev

如何在Laravel Vapor应用程序中获取HTTP请求的IP?

来自分类Dev

如何在JMeter HTTP请求中更改Post Body的内容

来自分类Dev

如何在同一Web服务中获取@PathParam和请求正文?

来自分类Dev

如何在Slim中访问POST请求的JSON请求正文?

来自分类Dev

在Apigility中,如何访问DELETE请求的正文内容

来自分类Dev

如何在HTTP请求正文中发送'&'字符?

来自分类Dev

如何在http请求正文中支持中文?

来自分类Dev

如何在HTTP发布请求正文中发布参数?

来自分类Dev

如何在PHP中获取HTTP请求来源

来自分类Dev

如何在compojure请求中获取特定的HTTP标头

来自分类Dev

如何在http请求python中获取所有结果

来自分类Dev

如何在组件中获取清晰的 http 请求数据?

来自分类Dev

如何获取GET请求正文

来自分类Dev

在ActionFilter中获取请求正文

来自分类Dev

如何在Laravel中减少js / css上的HTTP请求

来自分类Dev

如何多次读取netcore 3中的http请求正文?

来自分类Dev

如何在Play中的每个请求中记录正文?

Related 相关文章

  1. 1

    如何在Spring Boot Filter中获取HTTP请求正文内容?

  2. 2

    如何在单元测试中验证Flurl Http中的请求正文内容?

  3. 3

    如何在Google Cloud Functions中获取HTTP请求正文大小?

  4. 4

    如何在 Beanshell 预处理器中获取 HTTP POST 请求正文?

  5. 5

    如何仅从GET HTTP请求中获取消息正文?

  6. 6

    如何在Matlab中设置http发布请求的正文

  7. 7

    在Phoenix中获取原始HTTP请求正文

  8. 8

    http获取正文请求

  9. 9

    如何在 Laravel 中验证 HTTP 请求

  10. 10

    如何使用 httptools 从请求中获取正文?

  11. 11

    如何在芬奇中绑定请求正文

  12. 12

    如何在 Elasticsearch 中减少请求正文

  13. 13

    如何在Laravel Vapor应用程序中获取HTTP请求的IP?

  14. 14

    如何在JMeter HTTP请求中更改Post Body的内容

  15. 15

    如何在同一Web服务中获取@PathParam和请求正文?

  16. 16

    如何在Slim中访问POST请求的JSON请求正文?

  17. 17

    在Apigility中,如何访问DELETE请求的正文内容

  18. 18

    如何在HTTP请求正文中发送'&'字符?

  19. 19

    如何在http请求正文中支持中文?

  20. 20

    如何在HTTP发布请求正文中发布参数?

  21. 21

    如何在PHP中获取HTTP请求来源

  22. 22

    如何在compojure请求中获取特定的HTTP标头

  23. 23

    如何在http请求python中获取所有结果

  24. 24

    如何在组件中获取清晰的 http 请求数据?

  25. 25

    如何获取GET请求正文

  26. 26

    在ActionFilter中获取请求正文

  27. 27

    如何在Laravel中减少js / css上的HTTP请求

  28. 28

    如何多次读取netcore 3中的http请求正文?

  29. 29

    如何在Play中的每个请求中记录正文?

热门标签

归档