HTML页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>HTTP协议学习</title>
</head>
<body>
<form action="test1.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input name="field_1" type="text" value="123" />
<br/>
<input name="field_1" type="text" value="456" />
<br/>
<input name="field_2" type="text" value="789" />
<br/>
<input type="file" name="upload_file[]" />
<br/>
<input type="file" name="upload_file[]" />
<br/>
<input type="submit" name="Submit" value="submit" />
</form>
</body>
</html>
PHP页面:
<?
print_r($_FILES);
print_r($_POST);
?>
1.
当表单method为POST,并且enctype为multipart/form-data情况
1.1 请求数据
POST /go/test/test1.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost/go/test/test.php
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7db1192f70f20
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2)
Host: localhost
Content-Length: 906
Connection: Keep-Alive
Cache-Control: no-cache
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="field_1"
123
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="field_1"
456
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="field_2"
789
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="upload_file[]"; filename="D:\text_file1.txt"
Content-Type: text/plain
This is content of the text file 1.
Other files are same to text file.
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="upload_file[]"; filename="D:\text_file2.txt"
Content-Type: text/plain
This is content of the text file 2.
Other files are same to text file.
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="Submit"
submit
-----------------------------7db1192f70f20--
1.2 响应数据
HTTP/1.1 200 OK
Date: Thu, 27 Jan 2011 03:32:47 GMT
Server: Apache/2.2.15 (Win32) PHP/5.2.13
X-Powered-By: PHP/5.2.13
Content-Length: 849
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Array
(
[upload_file] => Array
(
[name] => Array
(
[0] => text_file1.txt
[1] => text_file2.txt
)
[type] => Array
(
[0] => text/plain
[1] => text/plain
)
[tmp_name] => Array
(
[0] => C:\WINDOWS\Temp\php14B.tmp
[1] => C:\WINDOWS\Temp\php14C.tmp
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 73
[1] => 73
)
)
)
Array
(
[field_1] => 456
[field_2] => 789
[Submit] => submit
)
1.3 简要分析说明
(1) 在消息头中存在一个“Content-Type: multipart/form-data;
boundary=---------------------------7db38a3570f20
",其中的boundary是用来告诉程序如何把消息体中各个字段分开;
(2)
HTTP协议发送的时候,并不关心各个field的name,即允许一次发送中有多个field有相同的名字。PHP处理这种数据时,如果名字相同且名字以
“[]”结尾,则会把这些数据放入一个数组中(见upload_file);如果名字相同但不是以“[]”结尾,则后面一个field会覆盖前面的field
(见field_1);
(3) 发送文件的时候是直接把文件内容放在该区域的boundary区域。
2.
当表单method为POST,并且enctype为application/x-www-form-urlencoded情况
2.1 请求数据
POST /go/test/test1.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost/go/test/test.php
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2)
Host: localhost
Content-Length: 129
Connection: Keep-Alive
Cache-Control: no-cache
field_1=123&field_1=456&field_2=789&upload_file%5B%5D=D%3A%5Ctext_file1.txt&upload_file%5B%5D=D%3A%5Ctext_file2.txt&Submit=submit
2.2 响应数据
HTTP/1.1 200 OK
Date: Thu, 27 Jan 2011 03:51:56 GMT
Server: Apache/2.2.15 (Win32) PHP/5.2.13
X-Powered-By: PHP/5.2.13
Content-Length: 209
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Array
(
)
Array
(
[field_1] => 456
[field_2] => 789
[upload_file] => Array
(
[0] => D:\\text_file1.txt
[1] => D:\\text_file2.txt
)
[Submit] => submit
)
2.3 简要分析
(1)
表单为POST方式的时候,当enctype为空时,enctype默认为“application/x-www-form-urlencoded”;
(2) 此时的文件域数据被当作普通数据来处理;
(3) 此时发送数据不是放在boundary之中而是组合成一个URL queryString的形式;
(4) 所有的field_name和field_value都被URL编码。
分享到:
相关推荐
c# 实现硬件仿真程序 模拟硬件发送数据,通过配置txt文件 将协议包数据发送对对应的服务器端
C#串口监听的实现由于串口不知道数据何时到达,因此有两种方法可以实现C#串口监听之串口数据的读取。1.用线程实时读串口2.用事件触发方式实现。但由于线程实时读串口的效率不是十分高效,因此比较好的方法是事件触发...
客户端的数据到服务器-客户端主动发送数据,可以扩展,服务器下载后再转发,代转发
TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收数据以及终止连接。 TCP是提供面向连接的,可靠...
HYPERLINK"http://www.cnblogs.com/zhangdongzi/archive/2011/04/18/2020179.html"Android与服务器端数据交互(http协议整合struts2+android)在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的...
TCP传输的QT程序,包括客户端和服务器端,具体功能: 1)客户端和服务器的连接; 2)客户端往服务器发送输入的需要发送的信息,在服务器的接收显示界面显示; 3)服务器往客户端发送输入的需要发送的信息,在客户端...
串口采集数据发送到服务器串口采集数据发送到服务器串口采集数据发送到服务器
飞鸽传书协议,客户端,服务器端程序 C++
工具可以将读到的串口数据发送到配置的云端HTTP服务器,实现串口数据转HTTP协议数据,并且HTTP协议头,以及HTTP协议包体都可以自定义。
从简单到复杂,首先简单介绍一下怎么利用UDP实现客服端发送消息给服务器端吧: 发送、接受消息过程大概如下: 服务器端:创建DatagramSocket对象用于打开指定端口并监听,然后用创建一个DatagramPacket,利用...
这是一个通过正点原子探索者开发板设计的定位系统设计,里面使用sim800c模块进行基站定位,然后利用sim800c模块通过http协议命令发送定位信息给服务器
手机端与服务器端建立通信,向服务器端发送命令请求,服务器端接到请求后,从网络(网页)获得数据,组织成字符串的形式发送到客户端(手机端)
客户端应用程序,建立到服务器的连接,关闭与服务器的连接,向服务器发送数据,接收数据
Android与服务器端数据交互(基于SOAP协议整合android+webservice)_.docx
模拟http服务器 模拟http协议的一个服务器端 运行之后能用IE连接
采用httpclient发送xml报文,httpServer接收报文。两个程序一看就明白可以直接调用执行不在多说。
设计目标与要求: ...我们利用数据包形式对数据进行封装,封装成功后,客户端发送数据包,服务器端接收数据包并处理数据包,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
网络编程socket发送接收数据包的服务器端代码详解
用java实现的http服务器端例程
flash与服务器端通信flash与服务器端通信flash与服务器端通信flash与服务器端通信