python - 为什么 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。
解决方案
事实证明,在我试图访问的端点的底层有一个身份验证重定向,它不编码 url,因此截断了查询字符串。
我通过查看 dataRequest.history URL 发现了这一点。
推荐阅读
- c# - Xamarin Plugin.Media“无法获取文件位置”
- sql - 问题从报告中过滤掉旧记录
- javascript - 告诉 JSON.parse 将某个键作为字符串进行处理?是否可以
- python - 如何从 python 客户端收听 webhook(https 地址端点)?
- oracle - 使用函数在oracle中存储游标
- java - 有没有办法在java中创建一个范围?
- java - 错误:二元运算符 '&&' 第一种类型 int 和第二种类型 boolean 的操作数类型错误
- youtube-api - 缺少必需参数:YouTube 数据 API 的 Python OAuth 调用范围
- mysql - 不能按字段从包含过滤
- xml - XSLT/TEI:如何让两个页面并排显示?