我们有一个代理PHP脚本,并通过
访问POST表单数据$postPayload = file_get_contents('php://input');
通常有用。
(不使用$_POST
的原因是我们有时会有PHP抑制的重复表单输入名称)
现在我们有一个带
的表单<form name="form" method="post"
action="/script.php" enctype="multipart/form-data">
在这种情况下,file_get_contents('php://input');
返回一个空字符串。
可以用
复制curl 'http://localhost/script.php' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://localhost/script.php?commandCode=NO_AUTH_REGIST_OPEN_USER&lang=de' -H 'Origin: http://misumi-europe.com.orange.imi.local' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36' -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryk3IVneARm3kqJ0fs' --data-binary $'------WebKitFormBoundaryk3IVneARm3kqJ0fs\r\nContent-Disposition: form-data; name="commandCode"\r\n\r\nNO_AUTH_NEXT\r\n------WebKitFormBoundaryk3IVneARm3kqJ0fs\r\n' --compressed
在这种情况下如何访问RAW POST数据?
答案 0 :(得分:2)
我能够在.htaccess
<Files "script.php">
# make post data always available in the proxy
php_flag enable_post_data_reading 0
</Files>
答案 1 :(得分:-2)
multipart/form-data
不会发送到php://输入,只发送到$ _POST。
在php.ini中,你可以设置enable-post-data-reading=off
来改变它,但$ _POST 总是为空。见http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading
您可以使用.htaccess
将其设置为单页php_value enable-post-data-reading off
还有一个apache hack:
<Location "/backend/XXX.php">
SetEnvIf Content-Type ^(multipart/form-data)(.*) NEW_CONTENT_TYPE=multipart/form-data-alternate$2 OLD_CONTENT_TYPE=$1$2
RequestHeader set Content-Type %{NEW_CONTENT_TYPE}e env=NEW_CONTENT_TYPE
</Location>
另请参阅:Get raw post data