Я не уверен, какую часть кода я могу показать, но концепция проста. Я пишу сценарий python, который работает с TD Ameritrade API. Я получаю URL-адрес портала из API и открываю его в браузере. Затем я настраиваю сервер сокетов для обработки перенаправления портала. Ниже приведен код для сервера:
serversocket = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = "localhost"
port = 10120
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# bind to the port
serversocket.bind((host, port))
print("listening")
# queue up to 5 requests
serversocket.listen(5)
allData = ""
while True:
# establish a connection
try:
conn,addr = serversocket.accept()
except KeyboardInterrupt:
break
print("Got a connection from %s" % str(addr))
while True:
data = conn.recv(4096)
if not data:
print("done")
break
print(data.decode('utf-8', "ignore"))
conn.close()
Когда я go через портал и перенаправляюсь, в консоли я вижу следующее:
Got a connection from ('127.0.0.1', 65505)
|,?2!c[N': [?`XAn] "::+/,0̨̩ / 5
jj localhost
3 + )http/1.1
ej\E<zpִ_<%q\r)+ - +
jj zz
Однако, если я нужно было скопировать URL-адрес, открыть новую вкладку, вставить его и go, я получаю следующий (правильный) ответ:
Got a connection from ('127.0.0.1', 49174)
GET /?code=<RESPONSE_TOKEN> HTTP/1.1
Host: localhost:10120
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/81.0.4044.138 Safari/537.36 OPR/68.0.3618.125
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-
exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Когда я go открываю обзор сети в моем браузере, я при попытке просмотреть заголовки запроса см. следующее предупреждение: Provisional headers are shown
И единственная разница между HTTP-запросом из перенаправления и запросом, когда я вручную вставляю URL-адрес, - это столбец initiator
в средство просмотра сети является «клятвой» для перенаправления и «другим» при вставке вручную.
Надеюсь, я предоставил достаточно информации и кода. Я могу попытаться сделать копию для воспроизведения, если это необходимо, но для подключения к API потребуется учетная запись разработчика TD Ameritrade.
Заранее благодарим за любую помощь. Я занимался поиском более 6 часов и ничего не нашел. Надеюсь, я не пропустил ничего очевидного.