如何查看Boto3 HTTPS请求字符串

How to view Boto3 HTTPS request string

我已经能够查看 botocore 发送的 PreparedRequest 的属性,但我想知道如何查看发送到 AWS 的确切请求字符串。我需要准确的请求字符串才能将其与我正在测试 AWS 调用的另一个应用程序进行比较。

所以您可能想要做的是通过代理(mitmproxy、squid)发送您的请求。然后检查代理发送的内容。 由于 HTTPS 数据是加密的,您必须先对其进行解密,然后记录响应,然后再将其加密并发送到 AWS。选项之一是使用 mitmproxy。 (真的很容易安装)

  1. 运行 mitmproxy
  2. 打开另一个终端并将代理指向 mitmproxys 端口:

    export http_proxy=127.0.0.1:8080
    export https_proxy=$http_proxy
    
  3. 然后在创建的时候设置verify=Falsesession/client

    In [1]: import botocore.session
    
    In [2]: client = botocore.session.Session().create_client('elasticache', verify=False)
    
  4. 发送请求并查看mitmproxy的输出

    In [3]: client.describe_cache_engine_versions()
    
  5. 结果应该是这样的:

    Host:             elasticache.us-east-1.amazonaws.com
    Accept-Encoding:  identity
    Content-Length:   53
    Content-Type:     application/x-www-form-urlencoded
    Authorization:    AWS4-HMAC-SHA256 Credential=FOOOOOO/20150428/us-east-1/elasticache/aws4_request, SignedHeaders=host;user-agent;x-amz-date, Signature=BAAAAAAR
    X-Amz-Date:       20150428T213004Z
    User-Agent:       Botocore/0.103.0 Python/2.7.6 Linux/3.13.0-49-generic
    
<?xml version='1.0' encoding='UTF-8'?>
<DescribeCacheEngineVersionsResponse
xmlns="http://elasticache.amazonaws.com/doc/2015-02-02/">  
<DescribeCacheEngineVersionsResult>
    <CacheEngineVersions>
      <CacheEngineVersion>
      <CacheParameterGroupFamily>memcached1.4</CacheParameterGroupFamily>
    <Engine>memcached</Engine>
    <CacheEngineVersionDescription>memcached version 1.4.14</CacheEngineVersionDescription>
    <CacheEngineDescription>memcached</CacheEngineDescription>
    <EngineVersion>1.4.14</EngineVersion>

您还可以在 boto3 中启用调试日志记录。这将记录所有请求和响应以及许多其他内容。启用它有点晦涩:

import boto3
boto3.set_stream_logger(name='botocore')

您必须指定 botocore 作为要记录的名称的原因是所有实际请求和响应都发生在 botocore 层。