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'
]

結果よくわからず数日経って、

minus9d.hatenablog.com

これ読んだら解決した。

PHPでいうvar_dump()みたいなのがほしいとずっと思ってた。

Pythonを初めて数日の僕にはありがたい記事でした。