GVKun编程网logo

PHP CURL 模拟form表单上传遇到的小坑(php curl 模拟表单提交)

8

在本文中,我们将给您介绍关于PHPCURL模拟form表单上传遇到的小坑的详细内容,并且为您解答phpcurl模拟表单提交的相关问题,此外,我们还将为您提供关于ajax提交form表单遇到的问题---

在本文中,我们将给您介绍关于PHP CURL 模拟form表单上传遇到的小坑的详细内容,并且为您解答php curl 模拟表单提交的相关问题,此外,我们还将为您提供关于ajax 提交form表单遇到的问题----1、ajax上传文件 基于jquery form表单上传文件、ajax模拟form表单同步方式下载文件、curl命令模拟表单上传文件的知识。

本文目录一览:

PHP CURL 模拟form表单上传遇到的小坑(php curl 模拟表单提交)

PHP CURL 模拟form表单上传遇到的小坑(php curl 模拟表单提交)

1:引用的时候

$parans ['img']=new \CURLFile($param);

传入的文件 在PHP版本5.5以上记得new CURLFile 不然会上传不成功

 /**
     * http post请求--CURL模拟表单上传文件
     * @param $url string 请求地址
     * @param $params array 请求参数
     * @param $header array 请求头
     * @return mixed
     */
    protected function _httpPostImg($url, $params = array() , $header = array())
    {
        $ch = curl_init();//初始化curl
        curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_TIMEOUT, 500);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        $header = array('Content-Type: multipart/form-data'); //请求头记得变化-不同的上传方式
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

        //当需要通过curl_getinfo来获取发出请求的header信息时,该选项需要设置为true
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);

        $response = curl_exec($ch);
        //打印请求的header信息
        //$request_header = curl_getinfo($ch, CURLINFO_HEADER_OUT);
        //print_r($ch);exit;
        curl_close($ch);
        return $response;
    }

 

ajax 提交form表单遇到的问题----1

ajax 提交form表单遇到的问题----1

将开发过程中,把遇到的问题及解决方法进行分享。

问题描述:

ajax提交找不到JS函数对象


解决过程:
1、检查发现没有引入jquery.form.js----没有解决
2、在ajaxOptions参数,最后一个删除那个“,”问题改善,可以找到js函数对象了----这说明,该对象内部是数组引用方法,其实很简单的
3、但是有提示type:post未定义,上网查资料发现数据类型如下:----value是字符
key1:‘value1’,
key2:‘value2’,
4、此外,既然ajaxOptions是一个对象,那么可以使用对象引用方法进行元素访问,这个要和JS权威教程里面讲的东西联系起来。


结果:解决


备注:
1、 找不到js函数对象,不一定是“js函数未定义类”错误,也许是别的方面引起的,本例就是该函数内部有语法问题,导致函数不被识别。

ajax上传文件 基于jquery form表单上传文件

ajax上传文件 基于jquery form表单上传文件

<script src="/static/js/jquery.js"></script>
<script> $("#reg-btn").click(function () { // 1. 取到用户填写的数据 var form_data_obj = new FormData(); form_data_obj.append(‘username‘,$(‘#id_username‘).val()); form_data_obj.append(‘password‘,$(‘#id_password‘).val()); form_data_obj.append(‘re_password‘,$(‘#id_re_password‘).val()); form_data_obj.append(‘phone‘,$(‘#id_phone‘).val()); form_data_obj.append(‘email‘,$(‘#id_email‘).val()); form_data_obj.append(‘csrfmiddlewaretoken‘,$("[name= ‘csrfmiddlewaretoken‘]").val()); form_data_obj.append(‘avatar‘,$(‘#avatar‘)[0].files[0]); // 2. 往后端发post请求 $(‘#reg-btn‘).click(function(){ $.ajax({ url:‘/reg/‘,type:‘post‘, data:form_data_obj,processData: false,contentType: false, success:function (response) { console.log(response); {#错误信息为1,则展示错误信息#} if(response.code ===1){$.each(response.msg,function (k,v) { console.log(‘k‘,k); console.log(‘v‘,v); $(‘#id_‘+k).next().text(v[0]).parent().addClass(‘has-error‘) })} else if(response.code ===0){location.href=response.msg} } }) }) }); // 每一个input标签获取焦点的时候,把自己下面的span标签内容清空,把父标签的has-error样式移除 $("input.form-control").focus(function () { $(this).val(‘‘).next("span").text(‘‘).parent().removeClass(‘has-error‘); }); // 前端页面实现头像预览 // 当用户选中文件之后,也就是头像的input标签有值时触发 $(‘#avatar‘).change(function () { var file = this.files[0]; var fr = new FileReader(); fr.readAsDataURL(file); fr.onload = function(){ $(‘#avatar-img‘).attr(‘src‘,fr.result) } })

 

注意点:

  ajax上传文件,借助FormData对象

  同时增加两组键值对

   processData:false,//tell jQuery not to process the data
   contentType: false,//tell jQuery not to set contentType


form组件上传文件

<form action="http://localhost:8081/thingsparse/addorupdthingsparse" method="post" enctype="multipart/form-data">
<input type="file" name="file" value="选择jar包"/>
<input id="submit_form" type="submit"value="保存"/>
</form>

 

注意:每条form表单参数都需要有name属性,以及form表单的enctype="multipart/form-data"。提交按钮type=‘submit’

ajax模拟form表单同步方式下载文件

ajax模拟form表单同步方式下载文件

个人博客:https://suveng.github.io/blog/​​​​​​​
ajax模拟form表单同步方式下载文件


    // 模拟表单提交同步方式下载文件
    // 能够弹出保存文件对话框
    function jumpDownload() {
        var url = "http://localhost:8080/ajaxDownloadServlet.do";
        var fileName = "testAjaxDownload.txt";
        var form = $("<form></form>").attr("action", url).attr("method", "post");
        form.append($("<input></input>").attr("type", "hidden").attr("name", "fileName").attr("value", fileName));
        form.appendTo(''body'').submit().remove();
    }

本文同步分享在 博客"suveng"(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

curl命令模拟表单上传文件

curl命令模拟表单上传文件

  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. }
复制代码


关于PHP CURL 模拟form表单上传遇到的小坑php curl 模拟表单提交的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于ajax 提交form表单遇到的问题----1、ajax上传文件 基于jquery form表单上传文件、ajax模拟form表单同步方式下载文件、curl命令模拟表单上传文件的相关知识,请在本站寻找。

本文标签: