当尝试使用botocore.vendored请求从lambda发出请求时,我发现我的查询字符串被截断了。
我尝试将其构建为字符串,字典,甚至尝试构建编码的url,但是它们似乎都在第一个查询参数之后被截断了
import base64
import os
import traceback
from urllib.parse import urlencode
from botocore.vendored import requests
ORIGIN = os.environ.get('ORIGIN')
def api_proxy(event, context):
if event['queryStringParameters']:
myParams = urlencode(event['queryStringParameters'],'utf-8')
url = ORIGIN + event['path']
print("URL: " + url)
print("Params: " + myParams)
try:
if myParams:
dataRequest = requests.get(url, params=myParams)
else:
dataRequest = requests.get(url)
print("Requested URL: " + dataRequest.url)
except:
traceback.print_exc()
我正在打印过程的三个不同部分,这就是我得到的:
URL: https://{my_domain}/premium/data/DefinedImage/png
Params: minY=47.00&minX=-15.00&maxY=61.00&maxX=5.00&width=1000&RUN=2019-05-30T09%3A00%3A00Z&styles=&FORECAST=%2B0&height=1200
Requested URL: https://{my_domain}/premium/data/DefinedImage/png?minY=47.00
我希望所请求的URL是完整的URL,所有参数都放在末尾,但是request.get似乎在第一个&号处截断了我的URL。
答案 0 :(得分:0)
requests方法接受数据作为字典或字节字符串。这是在Python中通过以b开头编码为字节的字符串来完成的,例如:b“ my string”
如果将参数作为字节传递,则可能需要使用字节编码:
urllib.parse.urlencode(event['queryStringParameters'])
答案 1 :(得分:0)
事实证明,我要尝试在端点的内部进行身份验证重定向,该身份验证重定向不对url进行编码,因此会截断查询字符串。
我是通过查看dataRequest.history URL来发现这一点的。