Lambda的新手并试图找出一些基本的东西。有一个调用外部REST服务器的函数。我可以在我的本地测试系统上运行这个Python代码而不会出现问题:
payload = {'userName': user_name, 'password': password}
r = requests.post(api_base + "/session",
data=json.dumps(payload),
headers={'accept': 'application/json',
'Content-Type': 'application/json'}
)
但是当我在lambda中运行它时,我的日志消息中出现奇怪的错误,在CloudWatch中打印出异常(模糊了我的URL):
找不到'“”/ session'
的连接适配器如果我对URL进行硬编码,那么它可以正常工作。在Python中形成URL可能有一些问题,可能在Python版本之间有不同的行为(我使用的是2.7.14)?我记录的异常字符串中的引用使我相信字符串连接在系统之间的工作方式不同。
我今天在浏览器中加载zip文件和编辑也很糟糕,但似乎它可能与最近影响Chrome的一些变化有关,因为当我切换到资源管理器时,工作正常。
以下是更多相关代码:
try:
# Get session key
payload = {'userName': user_name, 'password': password}
if DEBUG:
print("api_base = ", api_base, ", full url = ", api_base + "/session")
r = requests.post(api_base + "/session",
data=json.dumps(payload),
headers={'accept': 'application/json',
'Content-Type': 'application/json'}
)
# Check return status
if r.status_code != 200:
if DEBUG:
print("HTTP Request error: ", r.status_code,
", data = ", payload,
", api_base = ", api_base)
return ""
session_data = r.json()
return session_data['token']
except requests.exceptions.RequestException as e:
print(e)
return ""
在我的本地机器上执行此代码就可以了。当我在lambda中运行它时,我得到以下输出:
api_base =“https://[redacted].com/rest”,完整网址=“https://[redacted].com/rest”/会话 找不到“https://[redacted].com/rest”/ session'
的连接适配器出于安全原因,我使用'[]'编辑了URL的基本名称。正如你所看到的,lambda似乎用奇怪的引号打印字符串连接。
-Wayland