Попытка запросить API из AWS Lambda - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь запросить API с открытым исходным кодом, который возвращает информацию о геолокации IP, отправив запрос GET с IP.

Я тестирую код с ключом, который содержит IP-адрес (находится вkey1). Я пытаюсь получить информацию после отправки запроса, но я не уверен, что делаю неправильно.

Я попытался добавить IP в конец URL-адреса (в соответствии с инструкциями API geoip) но я продолжаю получать синтаксические ошибки.

import json
from botocore.vendored import requests

def lambda_handler(resp, requests, event):

    event = event.key1

    url = "https://freegeoip.app/json/" +event

    headers = {
        'accept': "application/json",
        'content-type': "application/json"
        }

    response = requests.request("GET", url, headers=headers)

    print(response.text)

У меня есть код, работающий в обычном синтаксисе Python ниже, просто не знаю, как заставить его работать с лямбда

import requests


userIP = '54.81.183.174'

def theFunction():
  url = "https://freegeoip.app/json/" + userIP

  headers = {
        'accept': "application/json",
        'content-type': "application/json"
        }

  response = requests.request("GET", url, headers=headers)

  print(response.text)

theFunction()

1 Ответ

1 голос
/ 10 ноября 2019

В вашем коде используется модуль requests, который не установлен с помощью AWS Lambda.

Вы можете упаковать его для использования с функцией AWS Lambda (см. python - Невозможно использовать Requests-Moduleна AWS Lambda - переполнение стека ), но проще использовать urllib, который является частью стандартного Python3.

Вот код, который работает:

import urllib.request
import json

def lambda_handler(event, context):

  ip = event['ip']

  with urllib.request.urlopen("https://freegeoip.app/json/" + ip) as f:
    data = json.loads(f.read())

  print(data)
  print(data['city'])

Вы можете запустить его с тестовыми данными:

{
  "ip": "54.81.183.174"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...