上次的问题:
用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,这里应当如何写呢?)
 

解决方案 »

  1.   

    在form里填的 <form method = "post" action = "test.php" enctype = "application/json">enctype属性用于指定表但提交数据时所采用的编码方式。编码方式的取值如下表所示。enctype取值 含义
    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
      

  2.   

    随机的,用于帮助server端正确解析http request body,也就是post的串
      

  3.   

    boundary=---------------------------7d9157a70ac8
    是可以随便填的。只是用来做内容的边界,区分不同内容的。
    在一个数据包里,边界必须一样的。
      

  4.   

    用curl上传文件的话很方便,什么header,post串都不用生成了,用fsockopen要写一堆
    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);