POST 请求 - 适用于本地 (200),但不适用于 docker (403) - Python3

POST request - works on local (200), but not on docker (403) - Python3

我尝试使用的 python 代码,我尽可能简化的是:

import requests
  
params = {
    'Email': 'someaccount@gmail.com',
    'EncryptedPasswd': 'longEncryptedPassword'
}
response = requests.post('https://android.clients.google.com/auth', data=params)

print(response.status_code)
print(response.content)

现在,当我尝试 运行 我的任何主机上的代码时,它工作正常:

ᐅ python -VV    
Python 3.7.2 (default, Apr 23 2021, 12:30:59) 
[GCC 10.2.0]                                                                                  
ᐅ python test.py
200
b'SID=BAD_COOKIE\nLSID=BAD_COOKIE\nservices=mail,hist,multilogin,android'                     

---
atay@atay$ ~ ᐅ python3 -VV 
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
[GCC 9.4.0]                                                                                   
atay@atay$ ~ ᐅ python3 test.py
200
b'SID=BAD_COOKIE\nLSID=BAD_COOKIE\nservices=mail,hist,multilogin,android' 

---
pi@raspberrypi$ ~ ᐅ python3 -VV      
Python 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0]                                                                                   
pi@raspberrypi$ ~ ᐅ python3 test.py  
200
b'SID=BAD_COOKIE\nLSID=BAD_COOKIE\nservices=mail,hist,multilogin,android'  

但是在 docker 上尝试 运行 相同的代码时,我得到了错误响应:

docker run -v $(pwd):/app python:3.7.2 sh -c 'pip install requests && python -VV && python /app/test.py'

...

Python 3.7.2 (default, Mar 27 2019, 08:41:08) 
[GCC 6.3.0 20170516]
403
b'Error=BadAuthentication' 

我也无法理解的是 - 如果我使用 curlify 创建 curl,IMO 应该与该调用相同 - 它 returns 403 而不是 200。

另一件事 - 如果我在 Postman 中创建相同的请求,它是 returns 200,但如果我在 Postman 中将它导出到 CURL 命令,它又是 returns 403。

我不确定在这种情况下可能是什么问题,有什么线索吗?

我会自己回答,因为我找到了解决方案,但仍然不明白哪里出了问题。

看起来 pip 库 requests>=2.25.0 不起作用,但所有早期版本都可以,因此将代码更改为:

ᐅ docker run -v $(pwd):/app python:3.9 sh -c 'pip install requests==2.25.0 && openssl version && python -VV && python /app/test.py'

让它发挥作用。 另外 OpenSSL 必须是 1.1.1,这就是我使用 3.9 而不是 3.7.2 的原因。