【问题标题】:Trying to query an API from AWS Lambda尝试从 AWS Lambda 查询 API
【发布时间】:2019-11-09 20:28:32
【问题描述】:

我正在尝试通过发送带有 IP 的 GET 请求来查询返回 IP 地理位置信息的开源 API。

我正在使用包含 IP 地址(位于key1)的密钥测试代码。我正在尝试在请求发送后获取信息,但我不确定我做错了什么。

我尝试将 IP 附加到 url 的末尾(如 geoip API 所示),但我不断收到语法错误。

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 语法中工作,只是不知道如何让它与 lambda 一起工作

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()

【问题讨论】:

    标签: python function aws-lambda


    【解决方案1】:

    您的代码正在使用 requests 模块,该模块未随 AWS Lambda 一起安装。

    您可以将其打包以与 AWS Lambda 函数一起使用(请参阅python - Cannot use Requests-Module on AWS Lambda - Stack Overflow),但使用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"
    }
    

    【讨论】:

    • 哇,这已经困扰了我好几个小时了,而且非常简单。谢谢!不过我有一个问题,为什么即使日志为我提供了我想要的信息,响应仍然为空?
    • 您没有提供足够的信息来回答这个问题(例如,“日志为我提供了我想要的信息”是什么意思),但这也可能是由于 @ 中的参数不正确987654326@函数。
    • 那是我的错!我把回调函数拿出来调试后忘记包含了。
    • 我可以将测试数据作为列表发送吗?
    • 数据作为字符串发送到 Lambda 函数,然后被解释为 JSON 对象。您可以将列表作为 JSON 传递:[1, 2, 3] 然后在循环中使用它(例如 for ip in event:
    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2017-11-14
    相关资源
    最近更新 更多