我正在嘗試將 lambda 中的標頭發送到 API 。我HTTPHeaderDict從https://urllib3.readthedocs.io/en/latest/user-guide.html 獲取。
import urllib3
import os
import json
# Get environment variable
api_url = os.getenv('API_URL')
def lambda_handler(event, context):
#print("Received event: " json.dumps(event, indent=2))
request = json.loads(json.dumps(event))
print(json.dumps(request['headers']))
headers = request['headers']
request_headers = urllib3.HTTPHeaderDict()
for key in headers:
request_headers.add(key, headers[key])
http = urllib3.PoolManager()
response = http.request('GET', api_url '/', headers=request_headers, timeout=10)
return {
'statusCode': response.status,
'headers': response.headers,
'body': response.data
}
我在 cloudwatch 中看到錯誤
[錯誤] AttributeError: 模塊 'urllib3' 沒有屬性 'HTTPHeaderDict'
uj5u.com熱心網友回復:
urllib3你用的是什么版本?如果您使用的是最新pip安裝的軟體包版本1.26.7,則不會在軟體包匯入級別公開它。如果您查看最新穩定版本的檔案,您會發現它沒有被提及為匯入級別的類。
您鏈接的鏈接也適用于2.0.0dev0您必須從 github 存盤庫本身安裝的版本。如果您無法從 repo 安裝,您應該能夠HTTPHeaderDict從_collections模塊中訪問該類from urllib3._collections import HTTPHeaderDict,然后將其稱為request_headers = HTTPHeaderDict().
uj5u.com熱心網友回復:
HTTPHeaderDict 似乎不可序列化,錯誤在于我發送回應的方式。
import urllib3
import os
import json
#from urllib3._collections import HTTPHeaderDict
# Get environment variable
api_url = os.getenv('API_URL')
def lambda_handler(event, context):
#print("Received event: " json.dumps(event, indent=2))
request = json.loads(json.dumps(event))
http = urllib3.PoolManager()
response = http.request('GET', api_url '/', headers=request['headers'], timeout=10)
response_headers = {}
for header_key in response.headers:
response_headers[header_key] = response.headers[header_key]
return {
'statusCode': response.status,
'headers' : response_headers,
'body': json.dumps('Hello from Lambda!')
}
我不得不回圈遍歷HTTPHeaderDict并將值放入另一個字典中。@mata 指出的request['headers']可以直接使用。
PS 我找不到指示urllib3AWS Lambda 函式使用哪個版本的 aws 檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/368999.html
標籤:蟒蛇-3.x 亚马逊网络服务 aws-api-网关 python-3.9
上一篇:如何將滾動條插入充滿按鈕的畫布?
下一篇:Python求冪運算子
