如何查看Boto3 HTTPS请求字符串
How to view Boto3 HTTPS request string
我已经能够查看 botocore 发送的 PreparedRequest 的属性,但我想知道如何查看发送到 AWS 的确切请求字符串。我需要准确的请求字符串才能将其与我正在测试 AWS 调用的另一个应用程序进行比较。
所以您可能想要做的是通过代理(mitmproxy、squid)发送您的请求。然后检查代理发送的内容。
由于 HTTPS 数据是加密的,您必须先对其进行解密,然后记录响应,然后再将其加密并发送到 AWS。选项之一是使用 mitmproxy。 (真的很容易安装)
- 运行 mitmproxy
打开另一个终端并将代理指向 mitmproxys 端口:
export http_proxy=127.0.0.1:8080
export https_proxy=$http_proxy
然后在创建的时候设置verify=False
session/client
In [1]: import botocore.session
In [2]: client = botocore.session.Session().create_client('elasticache', verify=False)
发送请求并查看mitmproxy的输出
In [3]: client.describe_cache_engine_versions()
结果应该是这样的:
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 层。
我已经能够查看 botocore 发送的 PreparedRequest 的属性,但我想知道如何查看发送到 AWS 的确切请求字符串。我需要准确的请求字符串才能将其与我正在测试 AWS 调用的另一个应用程序进行比较。
所以您可能想要做的是通过代理(mitmproxy、squid)发送您的请求。然后检查代理发送的内容。 由于 HTTPS 数据是加密的,您必须先对其进行解密,然后记录响应,然后再将其加密并发送到 AWS。选项之一是使用 mitmproxy。 (真的很容易安装)
- 运行 mitmproxy
打开另一个终端并将代理指向 mitmproxys 端口:
export http_proxy=127.0.0.1:8080 export https_proxy=$http_proxy
然后在创建的时候设置
verify=False
session/clientIn [1]: import botocore.session In [2]: client = botocore.session.Session().create_client('elasticache', verify=False)
发送请求并查看mitmproxy的输出
In [3]: client.describe_cache_engine_versions()
结果应该是这样的:
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 层。