Почему запросы boto усекают мою строку запроса? - PullRequest
0 голосов
/ 31 мая 2019

При попытке сделать запрос из лямбды с помощью запросов botocore.vendored я обнаружил, что моя строка запроса усекается.

Я пытался построить ее как строку, продиктовать и даже пыталсяпросто создайте закодированный 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 голосов
/ 31 мая 2019

Оказывается, что под капотом конечной точки, которую я пытаюсь поразить, есть перенаправление аутентификации, которое не кодирует URL-адрес и поэтому усекает строку запроса.

Я обнаружил это, посмотрев наURL-адреса dataRequest.history.

0 голосов
/ 31 мая 2019

методы запросов принимают данные в виде словарной или байтовой строки. Это делается в Python, начиная строку, закодированную в байтах, с a b, например: b "my string"

Если параметры передаются в байтах, вы можете использовать кодировку байтов:

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