我想用RequestsLibrary在Robot框架中用“Content-Type:multipart/formdata”发出POST请求,但似乎没有任何效果。 发出此请求的关键字如下所示:
*** Variables ***
&{API_CREDS} username=myusername password=mypwd
*** Keywords ***
Get token
# Assumes that session has been created
[Arguments] ${Session_id}
&{headers}= create dictionary Content-Type=multipart/form-data
${response}= Post Request ${Session_id} ${AUTH_TOKEN_URL_PATH} data=${API_CREDS} headers=${headers}
should be equal as integers ${response.status_code} 200
[Return] ${response.json()['token']}
但是实际发送的POST请求不包含“Content-Type”头,并且主体只是一个原始的data={'username' = 'myusername', ' password' = 'mypwd'}
我试过很多东西,但都没用。Robot框架的RequestsLibrary
实际上是否支持发送带有“Content-Type:multipart/formdata”的POST请求?,如果是,如何完成?在
PS:我正在使用Robot框架在Windows 10
和{
使用的底层python库-
requests
,在处理多部分“表单数据”内容时有一些特殊之处。它使用It primary作为请求的一部分发送文件(上传功能);粗略地说,当它解析参数时,它会剥离头,因为没有要发送的文件。另外,如果它没有做到这一点,它也不会被设计用来扣除多部分负载中的不同部分,例如,它不会自动将每个键值对放在一个单独的部分中。在为了克服这个问题,通常使用
files
参数,将不同部分的内容作为参数传递。在执行此操作时,requests
库将自动设置表单数据头,并将内容分成若干部分。下面是如何在RF中做到这一点,解释如下:
使用
Post Request
关键字中的files
参数,您的负载将按原样传递给requests
post方法。你不需要显式地设置头,库会为你做的。在作为参数传递的是一个字典,如果值是部分的内容。如您所见,实际值是python元组,因为您希望覆盖部件中的文件名。用一个例子更好地解释了这一点;如果数据是这样的,那么值就是一个简单的sting:
^{pr2}$,则有效载荷将显示为:
请注意,每个部分都有一个“filename”属性,它等于参数名。在
当值是元组时,它的第一个成员设置部件的“filename”属性;当它是
None
时,根本就没有“filename”,从而产生以下结果:,这可能是你的目标。在
相关问题 更多 >
编程相关推荐