>  기사  >  백엔드 개발  >  PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.

PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.

藏色散人
藏色散人앞으로
2019-04-27 09:43:122806검색

HTTP 프로토콜의 POST 메서드에는 HTTP 헤더의 다양한 콘텐츠 유형으로 식별되는 여러 형식의 데이터 프로토콜이 있습니다. 일반적으로 사용되는 형식에는

application/x-www-form-urlencoded가 있습니다. , 이는 가장 일반적인 from 형식이며 HTTP 헤드에서는 Content-Type: application/x-www-form-urlencoded.application/x-www-form-urlencoded,这是最常见的,就是from表单的格式.在HTTP的head中是Content-Type: application/x-www-form-urlencoded.

multipart/form-data,这个是用来上传文件的,在HTTP的head中是Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

Raw 这个不是特别常用,传输的数据在HTTP的body中只有一段,不是以键值对的形式存放.在HTTP的head中是Content-Type: application/json,Content-Type: text,Content-Type: application/xml,Content-Type: text/xml,等等形式

对于Content-Type: application/x-www-form-urlencoded这种form表单的数据,在php中,使用$_POST['name']可以直接获取, 没有什么特别的

Content-Type: multipart/form-data; 这种格式的数据,在php中使用$_POST['name']可以获取字符数据,使用$_FILES['file']可以获取.

对于Raw这种格式的数据,使用以上两种办法没有办法获取到,需要使用别的手段.

1.使用file_get_contents("php://input")获取;写一个简单php文件测试一下

<?php
$test=file_get_contents("php://input");
echo $test;

用postman测试一下

PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.

没问题,可以接收到

2.使用$GLOBALS['HTTP_RAW_POST_DATA']接收

<?php
$test=$GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];
echo $test;

用postman测试一下

PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.

卧槽,竟然出错了,提示没有发现HTTP_RAW_POST_DATA这个数组索引,什么鬼.Google一番,在php的官网看到了这样一段话

PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.

原来HTTP_RAW_POST_DATA这个在php5.6中已经被废弃了,在php7.0以后的版本中已经被删除了,我用的php版本为7.2,肯定就出错了

好吧,那就老老实实的用file_get_contents("php://input")

multipart입니다. /form-data, 이는 파일을 업로드하는 데 사용됩니다. HTTP 헤드에서는 <code>Content-Type: multipart/form-data; 경계=----WebKitFormBoundary7MA4YWxkTrZu0gW

Raw입니다. 특별히 일반적으로 사용되지는 않으며, 전송되는 데이터는 HTTP 본문에 단 하나의 단락만 포함하며, 키-값 쌍의 형태로 저장되지 않습니다. HTTP 헤드에는 Content-Type: application/json이 있습니다. , Content-Type: text,<code>Content-Type: application/xml,Content-Type: text/xml의 경우 Content-Type: application/x -www-form-urlencoded이 양식의 데이터는 $_POST['name']을 사용하여 PHP에서 직접 얻을 수 있습니다. 특별한 것은 없습니다

. Content -Type: multipart/form-data; 이 형식의 데이터의 경우 $_POST['name']를 사용하여 PHP에서 문자 데이터를 얻으려면 $를 사용하세요. _FILES['file']를 얻을 수 있습니다.

PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.Raw 형식의 데이터는 위의 두 가지 방법으로는 얻을 수 없으며, 다른 방법을 사용해야 합니다.

1. file_get_contents("php:// /input")가져오기; 간단한 PHP 파일을 작성하고 테스트하세요

<?php

namespace app\index\controller;

use think\Request;

class Index
{
    public function index(Request $request)
    {
        echo $request->getInput();
    }
}

postman을 사용하여 테스트하세요

🎜PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.🎜🎜문제없어요, 받아보실 수 있어요🎜 🎜2. 를 사용하세요. $GLOBALS['HTTP_RAW_POST _DATA']수신🎜 rrreee🎜우체부로 테스트🎜🎜7a74ad01c49935041208b86b 0eee531.png 🎜🎜젠장, 뭔가 잘못됐어요. 배열 인덱스 HTTP_RAW_POST_DATA를 찾을 수 없다고 하더군요. 뭐야. 나 Google에서 PHP🎜🎜 공식 웹사이트에서 이 단락을 확인했습니다. ="PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다."/>🎜🎜originalHTTP_ RAW_POST_DATA이것은 php5.6에서 폐기되었으며, php7.0 이후 버전에서는 삭제되었습니다. 제가 사용하는 php 버전은 7.2이고, 뭔가 잘못됐나봐요🎜🎜그럼 그냥 솔직하게 사용하세요file_get_contents("php://input")Get it🎜🎜실제 개발에서는 일반적으로 thinkphp를 더 많이 사용합니다. tp5.0에서는 Request의 getInput() 함수를 사용하여 Raw로 데이터를 가져올 수 있습니다🎜rrreee🎜Test it🎜🎜🎜🎜🎜문제 없습니다. 정상적으로 가져올 수 있습니다🎜🎜PHP에서 HTTP POST 데이터를 가져오는 방법을 소개하겠습니다. 먼저 여기가 필요한 친구들에게 도움이 되길 바랍니다! 🎜

위 내용은 PHP는 HTTP POST에서 다양한 형식의 데이터를 가져옵니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 aliyun.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제