ਬੇਨਤੀ session.get() ਨਾਲ ਚੱਲ ਸਕਦੀ ਹੈ ਪਰ PreparedRequest ਵਜੋਂ ਮੁੜ ਲਿਖਣ ਤੋਂ ਬਾਅਦ ਸਰਟੀਫਿਕੇਟ ਤਸਦੀਕ ਵਿੱਚ ਅਸਫਲ ਹੋ ਸਕਦੀ ਹੈ। ਹੇਠਲੇ ਪੱਧਰ ਦਾ send ਰਾਹ ਆਮ request ਤਰੀਕੇ ਵਾਲਾ ਵਾਤਾਵਰਣ ਮਰਜ ਨਹੀਂ ਕਰਦਾ।

import requests

with requests.Session() as session:
    request = requests.Request("GET", "https://example.com/")
    prepared = session.prepare_request(request)

    settings = session.merge_environment_settings(
        prepared.url, {}, None, None, None
    )
    response = session.send(
        prepared,
        timeout=(5, 15),
        **settings,
    )
    response.raise_for_status()
    print(response.status_code)

ਚਾਹੇ URL ਬਦਲਾਅ ਤੋਂ ਬਾਅਦ ਆਖਰੀ ਤਿਆਰ URL ਨਾਲ ਮਰਜ ਕਰੋ। ਪ੍ਰਾਕਸੀ ਤੇ ਬਾਈਪਾਸ ਫ਼ੈਸਲੇ ਮੰਜ਼ਿਲ ਉੱਤੇ ਨਿਰਭਰ ਹਨ, ਇਸ ਲਈ ਪੁਰਾਣੇ URL ਦੀ ਸੈਟਿੰਗ ਅਸਲ ਭੇਜੀ ਬੇਨਤੀ ਲਈ ਗਲਤ ਹੋ ਸਕਦੀ ਹੈ।

CA ਸੈਟਿੰਗ ਆਸਾਨੀ ਨਾਲ ਛੁੱਟਦੀ ਹੈ

ਆਮ ਵਾਤਾਵਰਣ ਭਰੋਸਾ ਚਾਲੂ ਹੋਵੇ ਅਤੇ ਤਸਦੀਕ ਸਪਸ਼ਟ ਓਵਰਰਾਈਡ ਨਾ ਹੋਵੇ ਤਾਂ ਮਰਜ REQUESTS_CA_BUNDLE ਅਤੇ ਉਸ ਦੇ ਬਦਲ CURL_CA_BUNDLE ਨੂੰ ਵੇਖਦਾ ਹੈ। ਮੂਲ verify ਨਾਲ ਸਿੱਧਾ send ਇਹ CA ਖੋਜ ਨਹੀਂ ਕਰਦਾ। ਤਸਦੀਕ ਬੰਦ ਕਰਨਾ ਚਾਹਿਆ ਸਰਟੀਫਿਕੇਟ ਭੰਡਾਰ ਦੇਣ ਦੀ ਥਾਂ ਫ਼ਰਕ ਲੁਕਾਉਂਦਾ ਹੈ।

Session.prepare_request() ਸੈਸ਼ਨ ਦੀ ਤਿਆਰੀ ਦਾ ਵਿਹਾਰ ਵੀ ਲਾਗੂ ਕਰਦਾ ਹੈ। ਸਿੱਧਾ Request.prepare() ਨਾਲ ਬੇਨਤੀ ਬਣਾਉਣਾ ਵੱਖਰੀ ਚੋਣ ਹੈ; ਸੈਸ਼ਨ ਕੂਕੀ ਜਾਂ ਹੋਰ ਤਿਆਰੀ ਆਪਣੇ ਆਪ ਲਾਗੂ ਹੋਣ ਦੀ ਆਸ ਨਾ ਕਰੋ।

ਪ੍ਰਾਕਸੀ ਲਈ ਹੋਰ ਖਾਸ ਨਿਯਮ ਹੈ

ਇਹ ਕਹਿਣਾ ਗਲਤ ਹੈ ਕਿ ਹਰ PreparedRequest ਪ੍ਰਾਕਸੀ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲ ਅਣਡਿੱਠੇ ਕਰਦਾ ਹੈ। Requests 2.34.2 ਵਿੱਚ proxies ਨਾਮ ਵਾਲਾ ਆਰਗੂਮੈਂਟ ਨਾ ਹੋਵੇ ਤਾਂ send ਮੂਲ ਪ੍ਰਾਕਸੀ ਤੈਅ ਕਰਦਾ ਹੈ। send ਨੂੰ proxies={} ਦੇਣ ਨਾਲ ਉਹੀ ਖਾਸ ਮੂਲ-ਨਿਰਧਾਰਨ ਸ਼ਾਖਾ ਛੱਡੀ ਜਾਂਦੀ ਹੈ।

merge_environment_settings ਨੂੰ ਦਿੱਤੀ ਖਾਲੀ ਡਿਕਸ਼ਨਰੀ ਦਾ ਕੰਮ ਵੱਖਰਾ ਹੈ: send ਨੂੰ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ ਮਰਜ ਇਸ ਨੂੰ ਲਾਗੂ ਵਾਤਾਵਰਣ ਰਾਹਾਂ ਨਾਲ ਭਰ ਸਕਦਾ ਹੈ। ਦੋ ਕੋਡਾਂ ਵਿੱਚ ਸਿਰਫ਼ ਖਾਲੀ ਡਿਕਸ਼ਨਰੀ ਵੇਖਣ ਨਾਲ ਉਸ ਨੂੰ ਲੈਣ ਵਾਲੇ ਵੱਖਰੇ ਤਰੀਕੇ ਰਹਿ ਜਾਂਦੇ ਹਨ।

ਆਪਣੇ ਬੇਨਤੀ ਬਣਾਉਣ ਦੇ ਕੋਡ ਵਿੱਚ ਤਿਆਰੀ, ਵਾਤਾਵਰਣ ਮਰਜ ਅਤੇ ਭੇਜਣਾ ਇਕੱਠੇ ਰੱਖੋ। ਐਪ ਜਾਣਬੁੱਝ ਕੇ trust_env=False ਵਰਤੇ ਤਾਂ ਮਰਜ ਉਸ ਨੀਤੀ ਨੂੰ ਮੰਨਦਾ ਹੈ; ਵਾਤਾਵਰਣ ਖ਼ੁਦ ਬੰਦ ਕਰਨ ਵਾਲੇ ਕਲਾਇੰਟ ਉੱਤੇ ਸੈਟਿੰਗ ਨਹੀਂ ਥੋਪਦਾ।

ਸੰਬੰਧਿਤ ਲੇਖ