Byłem w stanie wyświetlić atrybuty PreparedRequest wysyłane przez botocore, ale zastanawiam się, w jaki sposób mogę wyświetlić dokładny ciąg żądania, który jest wysyłany do AWS. Potrzebuję dokładnego ciągu żądania, aby móc go porównać z inną aplikacją, z którą testuję połączenia AWS.Jak wyświetlić kod żądania BOTO HTTPS
Odpowiedz
To, co prawdopodobnie chcesz zrobić, to wysłać zapytanie za pośrednictwem serwera proxy (mitmproxy, squid). Następnie sprawdź proxy, co zostało wysłane. Ponieważ dane HTTPS są zaszyfrowane, należy je najpierw odszyfrować, a następnie zarejestrować odpowiedź, a następnie zaszyfrować ją i wysłać do AWS. Jedną z opcji jest użycie mitmproxy. (To naprawdę łatwe do zainstalowania)
- Run mitmproxy
Otwórz inny proxy terminala i wskaż mitmproxys port:
export http_proxy=127.0.0.1:8080 export https_proxy=$http_proxy
Następnie ustaw
verify=False
podczas tworzenia sesji/klientaIn [1]: import botocore.session In [2]: client = botocore.session.Session().create_client('elasticache', verify=False)
Wyślij zapytanie i przejrzyj wyjście mitmproxy
In [3]: client.describe_cache_engine_versions()
Wynik powinien być podobny do tego:
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>
Można również włączyć rejestrowanie debugowania w boto3. To będzie rejestrować wszystkie żądania i odpowiedzi, a także wiele innych rzeczy. Jego nieco niejasne, aby włączyć go:
import boto3
boto3.set_stream_logger(name='botocore')
Powodem trzeba określić botocore
jak nazwa logowania jest to, że wszystko rzeczywistych żądań i odpowiedzi zdarzyć w warstwie botocore.
Próbowałem tego przed użyciem proxy. Problem polega na tym, że nie rejestruje on faktycznego, pełnego żądania wysłanego na serwer, tylko tych komponentów, które wykorzystuje do obliczenia podpisu, usługi itp. – zachhilbert
Nie udało mi się szybko zainstalować mitmproxy przy użyciu pip, ALE użyłem twojego pomysłu i uruchomiłem żądanie z Burp Suite. Byłem w stanie zobaczyć skąd pochodzi mój błąd. Dziękuję za pomysł! – zachhilbert