欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

curl命令模拟表单上传文件

程序员文章站 2024-01-22 14:30:46
...
  1. //初始化

  2. $ch = curl_init();
  3. // 要上传的本地文件地址"@F:/xampp/php/php.ini"上传时候,上传路径前面要有@符号

  4. $furl = "@F:/xampp/php/php.ini";
  5. $post_data = array (
  6. "upload" => $furl
  7. );
  8. //CURLOPT_URL 是指提交到哪里?相当于表单里的“action”指定的路径

  9. $url = "http://localhost/test/curl/curl_post.php";
  10. //设置变量

  11. curl_setopt($ch, CURLOPT_URL, $url);
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);//执行结果是否被返回,0是返回,1是不返回
  13. curl_setopt($ch, CURLOPT_HEADER, 0);//参数设置,是否显示头部信息,1为显示,0为不显示
  14. //伪造网页来源地址,伪造来自百度的表单提交

  15. curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com");
  16. //表单数据,是正规的表单设置值为非0

  17. curl_setopt($ch, CURLOPT_POST, 1);
  18. curl_setopt($ch, CURLOPT_TIMEOUT, 1);//设置curl执行超时时间最大是多少

  19. //使用数组提供post数据时,CURL组件大概是为了兼容@filename这种上传文件的写法,

  20. //默认把content_type设为了multipart/form-data。虽然对于大多数web服务器并
  21. //没有影响,但是还是有少部分服务器不兼容。本文得出的结论是,在没有需要上传文件的
  22. //情况下,尽量对post提交的数据进行http_build_query,然后发送出去,能实现更好的兼容性,更小的请求数据包。
  23. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  24. //执行并获取结果

  25. $output = curl_exec($ch);
  26. if($outopt === FALSE)
  27. {
  28. echo "
    ","cUrl Error:".curl_error($ch);
  29. }
  30. // 释放cURL句柄
  31. curl_close($ch);
  32. ?>
复制代码

文件2:curl_post.php

  1. echo "
    ";
  2. var_dump($_FILES);
  3. ?>
复制代码

结果如下:

  1. array(1) {
  2. ["upload"]=>
  3. array(5) {
  4. ["name"]=>
  5. string(7) "php.ini"
  6. ["type"]=>
  7. string(24) "application/octet-stream"
  8. ["tmp_name"]=>
  9. string(24) "F:xampptmpphpB2D1.tmp"
  10. ["error"]=>
  11. int(0)
  12. ["size"]=>
  13. int(46217)
  14. }
  15. }
复制代码