当前位置:Gxlcms > PHP教程 > curl命令模拟表单上传文件

curl命令模拟表单上传文件

时间:2021-07-01 10:21:17 帮助过:24人阅读

  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. }

人气教程排行