js 模拟POST提交enctype="multipart/form-data"类型的表单
var xmlHttp;
function creatXMLHttpRequest() {
if(window.ActiveXObject) {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
} else if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function handleStateChange() {
if(xmlHttp.readyState == 1) {
$("jieguo").innerHTML = "<h2>载入中..请稍候...</h2>";
}
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
var allcon = xmlHttp.responseText;
$("r").innerHTML = allcon;
}
}
}
function chaxun(url){
queryString="do=do"
creatXMLHttpRequest();
xmlHttp.open("POST",url,"true");
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
//xmlHttp.setRequestHeader("contentType","text/html;charset=gb2312");
xmlHttp.send(queryString);
}
现在要JS模拟multipart/form-data; boundary=---------------------------的方式提交
以下是非JS提交数据抓包,希望能帮忙实现:
Content-Type: multipart/form-data; boundary=---------------------------7db8c30150364
Accept-Encoding: gzip, deflate
Host:************
Content-Length: 242
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ****************
-----------------------------7db8c30150364
Content-Disposition: form-data; name="polls[]"
27
-----------------------------7db8c30150364
Content-Disposition: form-data; name="polls[]"
37
-----------------------------7db8c30150364-- 展开
只是需要文件上传才用它的
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
改成
xmlHttp.setRequestHeader("Content-Type","multipart/form-data;")。
js模拟post提交的代码
通过js模拟post提交
1:请求需要的参数过长,超过get允许的最大长度
2:想要隐藏地址栏的参数
//新创建一个form表单
document.write('<form name=myForm></form>');
var myForm=document.forms['myForm'];
myForm.action='runEmpAttendance';
myForm.method='POST';
var input = document.createElement('input');
input.type = 'text';
input.name = 'userId';
input.value = 100;
myForm.appendChild(input);
myForm.submit();
//使用jsp中已经存在的form表单,添加其他的参数
var myForm = document.forms['listEmployee']; //表单的name
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'currentPage';
input.value = 1;
myForm.appendChild(input);
myForm.method= 'POST';
myForm.submit()。
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
改成
xmlHttp.setRequestHeader("Content-Type","multipart/form-data;");
至于发送二进制数据,你自己解决吧。
-----------------------------7db8c30150364 这个其实有规律的
就是一个开始段一个结束段,7db8c30150364 只是用一串不重复的字符,标识一起其中间的东西就是数据,Content-Disposition: form-data; name="polls[]" 这个是用来表示什么数据,文件名是啥。
其实在socket发包中,上传文件的时候就要这么用,有空研究一下HTTP里面POST 文件时,应该如何处理。