首页 > 解决方案 > 为什么 boto 请求会截断我的查询字符串?

问题描述

当尝试使用 botocore.vendored 请求从 lambda 发出请求时,我发现我的查询字符串被截断。

我尝试将其构建为字符串、dict,甚至尝试构建一个编码的 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。

标签: pythonpython-3.xamazon-web-servicesaws-lambdapython-requests

解决方案


事实证明,在我试图访问的端点的底层有一个身份验证重定向,它不编码 url,因此截断了查询字符串。

我通过查看 dataRequest.history URL 发现了这一点。


推荐阅读