PHP之fsockopen提交POST数据讲解

对比表单[url=javascript:;]POST[/url]和fsockopen提交两种不同方式的区别。

表单POST方式提交情况下
$_POST 与 [url=javascript:;]php[/url]://input可以取到值,$HTTP_RAW_POST_DATA 为空
$_POST 以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换。
php://input 可通过输入流以文件读取方式取得未经处理的POST原始数据

php://input
允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的
php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。

fsockopen提交POST数据
例:
$sock = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno) ");
$data = "txt=" . urlencode("中") . "&bar=" . urlencode("Value for Bar");
fwrite($sock, "POST /posttest/resp****e.php HTTP/1.0 ");
fwrite($sock, "Host: localhost ");
fwrite($sock, "Content-type: application/x-www-form-urlencoded ");
fwrite($sock, "Content-length: " . strlen($data) . " ");
fwrite($sock, "Accept: */* ");
fwrite($sock, " ");
fwrite($sock, "$data ");
fwrite($sock, " ");
$headers = "";
while ($str = trim(fgets($sock, 4096)))
     $headers .= "$str ";
echo " ";
$body = "";
while (!feof($sock))
     $body .= fgets($sock, 4096);
fclose($sock);
echo $body;
与(一)结果一致

结论:
1. 用php://input可以很便捷的取到原始POST数据

2. $HTTP_RAW_POST_DATA 仅在POST的Content-Type类型不为PHP识别时才有效
如通常通过页面表单提交后的POST数据,不能通过$HTTP_RAW_POST_DATA提取到。因其编码类型属性(enctype属性)为 application/x-www-form-urlencoded、multipart/form-data。
注:即使在页面内显性地改变enctype属性为PHP不可识别的类型,仍无效。
因表单提交编码属性是表单限定,不可识别的类型将被认为按默认编码方式提交(即application/x-www-form-urlencoded)

3. $_POST仅当数据按 application/x-www-form-urlencoded 类型提交时才能得到。
加上 -.shtml就搜索就认为是静态页面拉。

时间: 2024-11-05 11:35:11

PHP之fsockopen提交POST数据讲解的相关文章

php使用curl提交xml数据

$str_callback_url="xxxx.com/api.php";$str_callback_url="xml数据";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $str_callback_url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch,

解决tomcat提交的数据乱码的问题

有时,开发过程中会遇到前端传入"中文"并返回时,会出现乱码!主要是因为前端通过tomcat7提交的数据就出现了乱码的问题,也就说根源在于tomcat7. 有2中方案解决该问题: (1)使用tomcat8,代替tomcat7 (2)可以修改tomcat7的server.xml中配置:

提交中文数据乱码问题总结

提交中文数据乱码问题总结 1.如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding("UTF-8")) 2.如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接收数据,因此要想不

SQL Server 利用批量(batchsize)提交加快数据生成/导入

在最小化日志操作解析,应用的文章中有朋友反映生成测试数据较慢.在此跟大家分享一个简单的应用,在生成数据过程中采用批量提交的方式以加快数据导入. 此应用不光生成测试数据上,在BCP导入数据中,复制初始化快照过程中等都可以根据系统环境调整 batchSize 的大小来提高导入/初始化速度. 应用思想:这里简单介绍下组提交概念,由于关系型数据库依靠日志来保证数据完整性,即先写日志,每当一个事务完成时就需要commit日志刷入磁盘,在高并发短小事务的前提下由于日志频繁落盘导致整体写吞吐下降.用Group

解决表单GET提交后台数据乱码问题

?在页面上提交数据到服务器有两种方式"GET"和"POST",当使用"GET"时,传输的数据是直接拼接在URL后面的.当数据中含有对HTML来说不安全的字符例如中文时,就会被编码,一般采用的是UTF-8编码.这时URL已经被转义成相对安全的字符串.此时再经过ios-8859-1的编码方式转换成二进制的形式跟随请求头一起发送到服务器端. ?到达服务器端时,服务器也对数据进行两次解码,服务器先把数据经过ios-8859-1解码,然后根据服务器默认的编

C# 用POST提交json数据

public void GetResponse(string url, string json) { Encoding encoding = Encoding.UTF8; byte[] data = encoding.GetBytes(json); //此处为为http请求url var uri = new Uri(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); //用此方法可以添加标准或非标准http

asp.net MVC中控制器获取表单form提交的数据之实体类数据

第一次写记录文章,难免有不足之处:欢迎指出. 1.新建一个mvc项目如: 2.新建一个Test.cs 注意get,set方法不能简写 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 using System; using System.Collections.Generic; using System.Linq; usi

window.open()提交POST数据

window.open(URL,name,specs,replace)   > Details 我们一般都是通过window.open(url, name, specs)以GET方式让浏览器打开一个新的页签,如果需要传递参数,就追加在url后面,如 http://demo/?a=1&b=2 问题思考 1)后面的参数如果太长该怎么办,浏览器对url长度是有限制的: 2)涉及到一些敏感数据,不想直接暴露出来: 解决方案 用POST方式来提交数据,但是window.open只允许我们用GET方式来

Yii 开发微信 '您提交的数据无法被验证'

使用Yii开发微信时,出现 [error][yii\web\HttpException:400] exception 'yii\web\BadRequestHttpException' with message '您提交的数据无法被验证.' 这个问题貌似Yii1.x跟Yii2都会出现,本人是使用Yii2.0出现的问题. 该问题由于Yii csrf引起,只要局部关闭就可以 public $enableCsrfValidation = false; 全局关闭也可以,但不建议! Yii 开发微信 '您