为什么boto请求会截断我的查询字符串?

时间:2019-05-31 13:19:46

标签: python python-3.x amazon-web-services aws-lambda python-requests

当尝试使用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。

2 个答案:

答案 0 :(得分:0)

requests方法接受数据作为字典或字节字符串。这是在Python中通过以b开头编码为字节的字符串来完成的,例如:b“ my string”

如果将参数作为字节传递,则可能需要使用字节编码:

urllib.parse.urlencode(event['queryStringParameters'])

答案 1 :(得分:0)

事实证明,我要尝试在端点的内部进行身份验证重定向,该身份验证重定向不对url进行编码,因此会截断查询字符串。

我是通过查看dataRequest.history URL来发现这一点的。