Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

disable_certificate_validation not being properly set on AdWordsClient

オープン
#473 コメント 1 件 リアクション 0 件 担当者 1 名 GitHub で見る

@msaniscalchi がすでに取り組んでいます。

2024年6月5日 から。

評価

この issue はまだ評価されていません。

説明

bug P2

I'm trying to use Charles proxy to monitor comunication between my script and the Google Adwords api.

I created a ProxyConfig object like this:

proxy_config = ProxyConfig(
    http_proxy='127.0.0.1:8888',
    https_proxy='127.0.0.1:8888',
    disable_certificate_validation=True
)

I disabled the certificate validation because Charles proxy uses a self signed certificate to monitor the https requests.

Then, I instantiate a oauth2 client and an adwords client like this:

oauth2_client = GoogleRefreshTokenClient(
    client_id,
    client_secret,
    refresh_token,
    proxy_config=proxy_config
)
            
self.client = AdWordsClient(
    developer_token,
    oauth2_client,
    client_customer_id=self.customer_id,
    proxy_config=proxy_config
)

When I make the calls to the Adwords api I can see that the refresh token is properly generated and monitored by Charles. However, the AdWordsClient calls fail with the error:

Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain)

Digging the code, I found out that the proxies defined in proxy_config are used on the Zeep client instantiated in
googleads.common._ZeepProxyTransport:

class _ZeepProxyTransport(zeep.transports.Transport):
  """A Zeep transport which configures caching, proxy support, and timeouts."""
  def __init__(self, timeout, proxy_config, cache):
    """Initializes _ZeepProxyTransport.

    Args:
      timeout: An integer timeout in MS for connections.
      proxy_config: A ProxyConfig instance representing proxy settings.
      cache: A zeep.cache.Base instance representing a cache strategy to employ.
    """
    if not cache:
      cache = zeep.cache.SqliteCache()
    elif cache == ZeepServiceProxy.NO_CACHE:
      cache = None

    super(_ZeepProxyTransport, self).__init__(
        timeout=timeout, operation_timeout=timeout, cache=cache)

    self.session.proxies = proxy_config.proxies # HERE THE PROXIES ARE USED

However the parameter disable_certificate_validation is never used! I think this can be solved by adding the following line just below:

self.session.verify = not proxy_config.disable_certificate_validation

At least this works for me.

Is this really a bug? Or is there a different way of configuring the "disable_certificate_validation" parameter that i'm missing?

主要言語
Python
スター
749
フォーク
967
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

googleads/googleads-python-lib のほかの issue

googleads/googleads-python-lib の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。