⑴ python如何模擬含有文件上傳的表單
在機器上安裝了 Python 的
setuptools,可以通過下面的命令來安裝 poster:
easy_installposter
裝完之後,就可以像用下面代碼模擬上傳文件表單了:
fromposter.encodeimportmultipart_encode
fromposter.streaminghttpimportregister_openers
importurllib2
#在urllib2上注冊http流處理句柄
register_openers()
#開始對文件"DSC0001.jpg"的multiart/form-data編碼
#"image1"是參數的名字,一般通過HTML中的<input>標簽的name參數設置
#headers包含必須的Content-Type和Content-Length
#datagen是一個生成器對象,返回編碼過後的參數
datagen,headers=multipart_encode({"image1":open("DSC0001.jpg","rb")})
#創建請求對象
request=urllib2.Request("http://localhost:5000/upload_image",datagen,headers)
#實際執行請求並取得返回
printurllib2.urlopen(request).read()
⑵ 如何在 Python 中模擬 post 表單來上傳文件
在機器上安裝了Python的setuptools工具,可以通過下面的命令來安裝 poster:
easy_installposter
裝完之後,安裝下面代碼就可以實現post表單上傳文件了:
fromposter.encodeimportmultipart_encode
fromposter.streaminghttpimportregister_openers
importurllib2
#在urllib2上注冊http流處理句柄
register_openers()
#開始對文件"DSC0001.jpg"的multiart/form-data編碼
#"image1"是參數的名字,一般通過HTML中的<input>標簽的name參數設置
#headers包含必須的Content-Type和Content-Length
#datagen是一個生成器對象,返回編碼過後的參數
datagen,headers=multipart_encode({"image1":open("DSC0001.jpg","rb")})
#創建請求對象(localhost伺服器IP地址,5000伺服器埠)
request=urllib2.Request("http://localhost:5000/upload_image",datagen,headers)
#實際執行請求並取得返回
printurllib2.urlopen(request).read()
⑶ 如何利用curl實現form表單提交 帶文件上傳
//上傳D盤下的來test.jpg文件,文件必須自存在,否則curl處理失敗且沒有任何提示
$data=array('name'=>'Foo','file'=>'@d:/test.jpg');
註:PHP5.5.0起,文件上傳建議使用CURLFile代替@
$ch=curl_init('http://localhost/upload.php');
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_exec($ch);
更多內容請參考:http://www.zjmainstay.cn/php-curl#十模擬上傳文件
⑷ js 模擬POST提交enctype="multipart/form-data"類型的表單
只是需要文件上傳才用它的
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
改成
xmlHttp.setRequestHeader("Content-Type","multipart/form-data;")。
⑸ 請教用Curl 在php 裡面模擬表單提交 文本+文件的寫法
publicfunctioncurl($url,$postFields=null)
{
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FAILONERROR,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
if($this->readTimeout){
curl_setopt($ch,CURLOPT_TIMEOUT,$this->readTimeout);
}
if($this->connectTimeout){
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$this->connectTimeout);
}
//https請求
if(strlen($url)>5&&strtolower(substr($url,0,5))=="https"){
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
}
if(is_array($postFields)&&0<count($postFields))
{
$postBodyString="";
$postMultipart=false;
foreach($postFieldsas$k=>$v)
{
if("@"!=substr($v,0,1))//判斷是不是文件上傳
{
$postBodyString.="$k=".urlencode($v)."&";
}
else//文件上傳用multipart/form-data,否則用www-form-urlencoded
{
$postMultipart=true;
}
}
unset($k,$v);
curl_setopt($ch,CURLOPT_POST,true);
if($postMultipart)
{
foreach($postFieldsas$k=>$v){
if("@"==substr($v,0,1)){
$tempffile=preg_replace('/^@/','',$v);
$advfield[$k]=newCURLFile($tempffile);
}else{
$advfield[$k]=$v;
}
}
curl_setopt($ch,CURLOPT_POSTFIELDS,$advfield);
unset($k,$v,$advfield);
//curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields);//田村改
//curl_setopt($ch,CURLOPT_POSTFIELDS,['file'=>newCURLFile(realpath('image.png'))]);
}
else
{
curl_setopt($ch,CURLOPT_POSTFIELDS,substr($postBodyString,0,-1));
}
}
$reponse=curl_exec($ch);
if(curl_errno($ch))
{
thrownewException(curl_error($ch),0);
}
else
{
$httpStatusCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if(200!==$httpStatusCode)
{
thrownewException($reponse,$httpStatusCode);
}
}
curl_close($ch);
return$reponse;
}
表單列表是 $postFields 傳入參數
數組,如果有文件 ,就在數組的值 前面加@
已經做好的 集成類 的實現 其他類欄位和方法沒給出,寫不下了。
但是大致的實現過程應該可以看懂了
⑹ 模擬JQUERY多文件上傳效果
<!doctypehtml>
<htmllang="zh">
<head>
<metacharset="utf-8">
<title>HTML5AjaxUploader</title>
<scriptsrc="jquery-2.1.1.min.js"></script>
</head>
<body>
<p><inputtype="file"id="upfile"></p>
<p><inputtype="button"id="upJS"value="用原生JS上傳"></p>
<p><inputtype="button"id="upJQuery"value="用jQuery上傳"></p>
<script>
/*原生JS版*/
document.getElementById("upJS").onclick=function(){
/*FormData是表單數據類*/
varfd=newFormData();
varajax=newXMLHttpRequest();
fd.append("upload",1);
/*把文件添加到表單里*/
fd.append("upfile",document.getElementById("upfile").files[0]);
ajax.open("post","test.php",true);
ajax.onload=function(){
console.log(ajax.responseText);
};
ajax.send(fd);
}
/*jQuery版*/
$('#upJQuery').on('click',function(){
varfd=newFormData();
fd.append("upload",1);
fd.append("upfile",$("#upfile").get(0).files[0]);
$.ajax({
url:"test.php",
type:"POST",
processData:false,
contentType:false,
data:fd,
success:function(d){
console.log(d);
}
});
});
</script>
</body>
</html>
<?php
if(isset($_POST['upload'])){
var_mp($_FILES);
move_uploaded_file($_FILES['upfile']['tmp_name'],'up_tmp/'.time().'.dat');
//header('location:test.php');
exit;
}
?>
⑺ C#代碼模擬Form表單提交同時還得上傳XML文件
不知道理解對不對
有個笨的方法 就是在後台生成js代碼 這個js代碼的功能就是生成表單 讓後再讓這個js代碼觸發form提交事件