上次的问题:
用curl的post方法模拟表单提交,但表单的mime类型为:application/json;utf-8 此时用curl应当如何做,设置哪个参数呢?
我试着在header当中加入:Content-Type=application/json;gb2312 但还是不成功,搞了一天也实在想不出来问题在哪里,请知道的朋友告诉一下。谢谢了多谢:foolbirdflyfirst 的正确解答如下:$fn = curl_init($url);
curl_setopt($fn, CURLOPT_HTTPHEADER, array("Content-type:application/json;charset=utf-8")); 这次的问题是我用curl模拟向一aspx网站post提交,查看其:content-type如下:
Content-Type multipart/form-data; boundary=---------------------------7d9157a70ac8不知道boundary=---------------------------7d9157a70ac8 是什么意思?是固定的值还是如何计算出来的,还是随机值?如果用curl模拟的话。
curl_setopt($fn, CURLOPT_HTTPHEADER,这里应当如何写呢?)
用curl的post方法模拟表单提交,但表单的mime类型为:application/json;utf-8 此时用curl应当如何做,设置哪个参数呢?
我试着在header当中加入:Content-Type=application/json;gb2312 但还是不成功,搞了一天也实在想不出来问题在哪里,请知道的朋友告诉一下。谢谢了多谢:foolbirdflyfirst 的正确解答如下:$fn = curl_init($url);
curl_setopt($fn, CURLOPT_HTTPHEADER, array("Content-type:application/json;charset=utf-8")); 这次的问题是我用curl模拟向一aspx网站post提交,查看其:content-type如下:
Content-Type multipart/form-data; boundary=---------------------------7d9157a70ac8不知道boundary=---------------------------7d9157a70ac8 是什么意思?是固定的值还是如何计算出来的,还是随机值?如果用curl模拟的话。
curl_setopt($fn, CURLOPT_HTTPHEADER,这里应当如何写呢?)
解决方案 »
- Zend Optimizer v2.5.10环境问题 和Apache 1.3.33 怎么设置两个端口
- apache2+php5.2+mysql5.0网站为什么登陆后又回到原始状态?登陆不上?(ampserv5.2.0调试正常)
- PHP5多进程的子进程内连接MySQL5的问题
- 关于IIS6+FastCGI的出错问题
- 如何使用BBCode代码?以及如何安全地使用?
- 往mysql数据库添加数据,html代码会转换成html实体。像是使用了htmlspecialchars进行转换,但是的确没有用它。
- 求 满足某个条件的字符串代替函数
- 制作局域网内点对点交流,请给个思路
- ADSL上网的设备要多少钱?
- php程序员找工作时做过哪些奇葩的笔试题
- 关于php参考代码的问题
- PHP乱码问题,求高手
text/plain 以纯文本的形式传送
application/x-www-form-urlencoded 默认的编码形式,即URL编码形式
multipart/form-data MIME编码,上传文件的表单必须选择该项
通常情况下,表单采用application/x-www-form-urlencoded编码方式,所以enctype属性通常可以不指定。但也有例外。例如,若要将当前表单数据提交到邮件地址为“[email protected]”的信箱中,此时的用法应为: <form method = "post" action = "mailto:[email protected]" enctype = "text/plain">注意,此时必须指定表单的enctype属性值为“text/plain”。那么什么是MIME类型呢?最早的HTTP协议中,所有传送的数据都被客户程序解释为超文本标记语言HTML文档。而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。MIME(Multipurpose Internet Email Extension),意为多用途Internet邮件扩展,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是JPEG文件等等。当服务器把把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。在HTTP中,MIME类型被定义在<head>、</head>部分的Content-Type中。http://hi.baidu.com/%B9%FE%B5%C2s/blog/item/89e945fb5e199616a9d3111c.html
是可以随便填的。只是用来做内容的边界,区分不同内容的。
在一个数据包里,边界必须一样的。
curl:
==============
$file = array("upimg"=>"@E:/png.png");//文件路径,前面要加@,表明是文件上传.
$curl = curl_init("http://localhost/a.php");
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,$file);
curl_exec($curl);fsockopen:
===============
$uploadFile = file_get_contents("E:/png.png");
$boundary = md5(time());$postStr .="--".$boundary."\r\n";//边界开始,注意默认比header定义的boundary多两个'-'
$postStr .="Content-Disposition: form-data; name=\"upimg\"; filename=\"E:/png.png\"\r\n";
$postStr .="Content-Type: image/png\r\n\r\n";
$postStr .=$uploadFile."\r\n";
$postStr .="--".$boundary."\r\n";//边界结束
fwrite($fp,"POST /a.php HTTP/1.0\r\n");
fwrite($fp,"Content-Type: multipart/form-data; boundary=".$boundary."\r\n");
fwrite($fp,"Content-length:".strlen($postStr)."\r\n\r\n");
fwrite($fp,$postStr);
while (!feof($fp)){
echo fgets($fp, 128);
}
fclose($fp);a.php
==============
print_r($_FILES);