(Спасибо, что взглянули на это!)
Я пытаюсь использовать python3 и простой urllib3 http.request для чтения HTML из https://login.morganstanleyclientserv.com.
Кажетсякак сервер сбрасывает соединение, и в конечном итоге попытки urllib3 прекращаются.
Есть ли здесь проблема согласования TLS?Если так, как может urllib3 компенсировать?
Или проблема в другом месте?Как решить эту проблему?
Я попытался идентичной (?) Транзакции, используя curl ... он возвращает ожидаемый HTML без какой-либо задержки.
Я также пытался читать из другогоsite (например, https://client.schwab.com/Login/SignOn/CustomerCenterLogin.aspx) ... без проблем.
Chrome загружает https://login.morganstanleyclientserv.com без проблем.
uname -a; python3 -V возвращает:
Linux Ubuntu 4.18.0-17-generic # 18 ~ 18.04.1-Ubuntu SMP Пт 15 марта 15:27:12 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux Python 3.6.7
Это работает curl:
curl -v --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" --header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" --header "Accept-Encoding: text/plain" --header "Accept-Language: en-US,en;q=0.9" --output foo https://login.morganstanleyclientserv.com
Это код python3 + urllib3, который зависает (после печати 1, затем 2, но ничего больше):
import urllib3
import certifi
print (1)
try:
http = urllib3.PoolManager(cert_reqs = 'CERT_REQUIRED',
ca_certs = certifi.where())
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'text/plain',
'Accept-Language':'en-US,en;q=0.9'
}
print (2)
# *** This hangs ***
r = http.request("GET", "https://login.morganstanleyclientserv.com", headers)
print (3)
print (r.data)
print (4)
except Exception as e:
print(e)
except:
print("error")