LambdaでHTTPリクエストしたときに遭遇したやつ
Lambdaから外部のAPIを叩いてたときに遭遇した
<urllib.request.Request object at 0x7faa06fe2278>
サンプルコードは以下
def http_post(url, headers, body): method = 'POST' data = urllib.parse.urlencode(body).encode() req = urllib.request.Request(url, data, headers, method) try: with urllib.request.urlopen(req) as res: body = res.read().decode() except urllib.error.HTTPError as err: logger.info(err.code) except urllib.error.URLError as err: logger.info(err.reason)
とりあえずそのままググったら、1件目にstackoverflowで引っかかった。 でも2013年6月で少し不安 stackoverflow.com
とりあえず回答にあるようにreq.__dist__
をログに出してみた
{ '_full_url': 'APIのURL', 'fragment': None, 'type': 'https', 'host': 'APIのドメイン', 'selector': 'APIのURI', 'headers': {}, 'unredirected_hdrs': {}, '_data': b'key1=val1&key2=val2&…’, '_tunnel_host': None, 'origin_req_host': 'POST', 'unverifiable': False }
一応dir(req)
もログに出してみた
(※見やすいように適度に改行を入れている)
これでreq
で使用できるキーが出るとのこと。
[ '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_data', '_full_url', '_parse', '_tunnel_host', 'add_header', 'add_unredirected_header', 'data', 'fragment', 'full_url', 'get_full_url', 'get_header', 'get_method', 'has_header', 'has_proxy', 'header_items', 'headers', 'host', 'origin_req_host', 'remove_header', 'selector', 'set_proxy', 'type', 'unredirected_hdrs', 'unverifiable' ]
結果よくわからず数日経って、
これ読んだら解決した。
PHPでいうvar_dump()みたいなのがほしいとずっと思ってた。
Pythonを初めて数日の僕にはありがたい記事でした。