• web_submit_data详解


    定义:处理无状态或者上下文无关的表单提交。它用来生成表单的GET或POST请求,这些请求与Form自动生成的请求是一样的,发送这些请求时不需要表单上下文。 
    函数形式:web_submit_data( const char *StepName, const char *Action, , ITEMDATA, , [ EXTRARES, ,] LAST ); 
    这里写图片描述

    说明:

    • 当VuGen设为基于URL的录制模式,或者基于HTML的录制方式时,但 Recording Options—HTML Advanced下的A script containing explicit URLs only选项被选中时,web_submmit_data函数才会被录制。

    • 不论采用URL查询的方式(GET),还是采用请求体发送(POST)的方式,此函数都指示出Form中的数据是如何发送到服务器的。

    • 如果VuGen处于HTTP录制模式下,此时记录Web进程时,会产生此函数。在提交Form时,如果无法生成web_submit_form函数,VuGen也会生成web_submit_data函数。

    • 在录制选项中,Toos—Recording Option下—Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源。只有选择了“Record within the current script step”时,List of Resource Attributes才会被录制到。非HTML资源(如:gif和jpg等图象文件)。

    • 任何对于“EncType”的指定都会覆盖web_add_[auto_]header函数指定的Content-Type。当省略了“EncType”时,任何一个web_add_[auto_]header函数都会起作用。如果既没有指定EncType也没有web_add_[auto_]header函数,且“Method=POST”,“application/x-www-form-urlencoded”会作为默认值来使用。其他情况下,不会产生Content-Type请求头。

    • ContentType:文件类型标识符,如果“EncType”是“multipart/form-data”用来上传文件时,需要用到“ContentType”。当在ITEMDATA中的Data子句中指定了“File=Yes”,且文件也在此子句中,ContentType才适用,此时它会作为同一个子句的值来传递。正常情况下,“Content-Type”根据所上传文件的扩展名自动生成。如:

    7d025e2b16b064e
    
     Content–Disposition: form–data; name="uploaded_file"; filename="D:\temp\a.txt"
    
     Content–Type: text/plain
    
     
    
    



    • “ContentType”如果指定了空值,那么“Content-Type”头将不包含在文件中。如果没有显示的指定“ContentType”的值,当上传的文件为空时,不管文件扩展名是什么,都默认使用“application/x-unknown-content-type”做为”ContentType”的值。VuGen不会检查指定的ContentType是否有效。

    • 通常情况下,如果录制了web_submit_data函数,VuGen会把“name”和“value”一起录制到ITEMDATA一节中。如果不想在脚本中以明文显示“value”,可以对它进行加密。把“Value”改为“EncryptedValue”,然后把录制到的值改为加密后的值。请参考web_submit_form中相关的内容。

    示例1:一般的表单提交

    web_submit_data("default.aspx", 
        "Action=http://lazarus/flightnet/default.aspx", 
        "Method=POST", 
        "TargetFrame=", 
        "RecContentType=text/html", 
        "Referer=http://lazarus/flightnet/", 
        "Snapshot=t7.inf", 
        "Mode=HTML", 
        ITEMDATA, 
        "Name=grpType", "Value=radRoundtrip", ENDITEM, 
        "Name=lstDepartingCity", "Value=DEN", ENDITEM, 
        "Name=lstDestinationCity", "Value=LAX", ENDITEM, 
        "Name=txtDepartureDate", "Value=8/19/2003", ENDITEM, 
        "Name=txtReturnDate", "Value=8/19/2003", ENDITEM, 
        "Name=txtQuantity", "Value=1", ENDITEM, 
        "Name=radClass", "Value=1", ENDITEM, 
        "Name=radSeat", "Value=1", ENDITEM, 
        "Name=btnAvailableFlights", "Value=Next >", ENDITEM, 
        LAST ); 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    示例2:web_submit_data使用POST方法提交两个文件

    web_submit_data("Attachments", 
        "Action=http://barton.cottage@.Devonshire.uk/Attachments?YY=45434", 
        "Method=POST", 
        "EncType=multipart/form–data", 
        "TargetFrame=", 
        "RecContentType=text/html", 
        "Referer=http:///barton.cottage@.Devonshire.uk/Compose?YY=20435", 
        "Snapshot=t5.inf", 
        "Mode=HTML", 
        ITEMDATA, 
            "Name=userFile0", 
            "Value=E:\sense_sensibility\Elinor.htm", 
            "File=yes", 
            "ContentType=text/html", // Override default "text/plain" for .txt files 
            FilePath=Elinor.txt", 
            "ContentTransferEncoding=html/text", 
        ENDITEM, 
            "Name=userFile1", 
            "Value=E:\sense_sensibility\Marianne.jpg", 
            "File=yes", 
        ENDITEM, 
        LAST ); 
    
    注:表单中enctype="multipart/form-data"的意思是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作。
    enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。

    java scripts:

    web.submit_data("saveFile2",
              "Action=<m_host>/myLoan-mobile/action/api/saveFile",
              new String[]{ //options[]
             "Method=POST",
            "EncType=multipart/form-data",
            "RecContentType=application/josn",
            "Mode=HTTP"
        },
            new String[]{ //data[]
           "Name=token", "Value=<token>", web.ENDITEM,
           "Name=pictureFile", "Value=E:\LRWorkspace\loginandsavephototest\imageidcardfrontpath.jpeg",
           "File=YES",
           "ContentType=image/jpeg",  //不加这一行,LR默认设置为ContentType=image/pjpeg格式,回放失败。
           web.ENDITEM,
          web.LAST
    });

    传图片时,ie会把 jpg、jpeg翻译成image/pjpeg,png翻译成image/x-png 。而火狐则很标准:jpg、jpeg翻译成image/jpeg,png翻译成image/png。

    为了避免这个问题,我在多个浏览器上做了测试,结果如下:

    firefox image/jpeg image/bmp image/gif image/png

    ie 6 image/pjpeg image/bmp image/gif image/x-png

    ie 7 image/pjpeg image/bmp image/gif image/x-png

    ie 8 image/pjpeg image/bmp image/gif image/x-png

  • 相关阅读:
    抽象类中可以存在的成员
    读暗时间后感
    使用正则表达式限制QLineEdit不能输入大于某个整数
    QSharedMemory 使用
    BUUCTF-misc九连环 详解
    BUUCTF-数据包中的线索 1
    BUUCTF-Windows系统密码
    [CISCN2019 华北赛区 Day2 Web1]Hack World 1详解
    [ZJCTF 2019]NiZhuanSiWei 1详解
    BUUCTF [BJDCTF2020]Easy MD5 详解
  • 原文地址:https://www.cnblogs.com/shengs/p/6508806.html
Copyright © 2020-2023  润新知