標準ライブラリurllib request と 外部モジュールrequests をLambdaのコードでそれぞれまとめた
はじめに
Lambdaでapiにリクエストする際、requestのモジュールが必要でした。
標準ライブラリurllib request と 外部モジュールrequests がありましたので、それぞれまとめます。
外部モジュールであるrequestsの方が、コード量が少ないですが、モジュールをアップする手間があります。
ただ、手間と言ってもchalice等を使用することで、手間を無くすことはできます。
標準ライブラリurllib request
requestsライブラリをデプロイパッケージに含める必要はなく、import request
するだけでよいです。
GET,POSTの場合
from urllib import request
import urllib
import json
import os
# get
def get_api(event):
api = '/test'
request_url = os.environ['URL'] + api
headers = {'x-api-key': os.environ['API_KEY']}
try:
request_get = request.Request(url=request_url, headers=headers)
with request.urlopen(request_get) as res:
body = res.read().decode()
return json.loads(body)
except (urllib.error.HTTPError) as error:
status_code = error.code
print("エラーログなし %s\n URL: %s" %(status_code,request_url))
except (urllib.error.URLError) as error:
status_code = "HTTP通信の不可"
print(status_code)
# post
def post_api(id,count):
api = '/test'
request_url = os.environ['URL'] + api
headers = {'x-api-key': os.environ['API_KEY'], 'content-type': 'application/json'}
data = {
'id': int(id),
'count': int(count)
}
try:
request_post = request.Request(url=request_url, method="POST",headers=headers,data=json.dumps(data).encode())
with request.urlopen(request_post) as res:
body = res.read().decode()
return json.loads(body)
except (urllib.error.HTTPError) as error:
status_code = error.code
print("エラーログなし %s\n URL: %s" %(status_code,request_url))
except (urllib.error.URLError) as error:
status_code = "HTTP通信の不可"
print(status_code)
-
urllib.error.URLError
: HTTP 通信に失敗した場合 -
urllib.error.HTTPError
: HTTP ステータスコードが 4xx または 5xx の場合
例外処理も必須ですね。
また、API_KEY
とURL
は、環境変数を使用しています。
PUT、PATCH、DELETEの場合
基本的に、POSTのコードのうちmethod
を変えるだけです。
request_put = request.Request(url=request_url, method="PUT",headers=headers)
外部モジュールrequests
Python の HTTP ライブラリで、標準ライブラリurllib request
よりも読みやすくコーディングできます。
導入方法
モジュールをLambda、もしくは、Lambdaレイヤーにアップする必要があります。以下の記事を参考にアップできます。
GET,POSTの場合
import json
import os
import requests
def get_api(event):
api = '/test'
request_url = os.environ['URL'] + api
headers = {'x-api-key': os.environ['API_KEY']}
try:
requests_get = requests.get(request_url,headers=headers)
response = requests_get.json()
print(response)
requests_get.raise_for_status()
except requests.exceptions.RequestException as e:
print(e.response.text)
def post_api(id, count):
api = '/ex/busstops'
request_url = os.environ['URL'] + api
headers = {'x-api-key': os.environ['API_KEY'], "Content-Type":"application/json"}
data = {
'id': int(id),
'count': int(count)
}
try:
requests_post = requests.post(request_url,headers=headers,data=json.dumps(data))
response = requests_post.json()
print(response)
requests_post.raise_for_status()
except requests.exceptions.RequestException as e:
print(e.response.text)
requests_get.raise_for_status()
:ステータスコードが200番以外の場合、例外を起こす、つまりエラーメッセージを吐き出してスクリプトを停止させます。
純粋にステータスコードが知りたい場合、以下のメソッドを使います。
requests_get.status_code
:ステータスコードを出力する
PUT、PATCH、DELETEの場合
基本的に、POSTのコードのうちメソッド
を変えるだけです。
requests_put = requests.put(request_url,headers=headers)
参照
Author And Source
この問題について(標準ライブラリurllib request と 外部モジュールrequests をLambdaのコードでそれぞれまとめた), 我々は、より多くの情報をここで見つけました https://qiita.com/holdout0521/items/d99cc0097a4ef4f24d73著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .