Ao clicar em um hyperlink no Excel, o recurso será chamado três vezes (ou duas vezes, se o URL foi visitado antes). Primeira e segunda vez escondida, terceira vez como esperado em um navegador.
Detalhes
Estou usando o HYPERLINK-formular no Excel 2016 como o seguinte, mas o problema também ocorre ao trabalhar sem um formulário e apenas o recurso de hiperlink:
=HYPERLINK(CONFIRM_NO_DATA_URL&B3)
De qualquer forma, é suposto chamar um URL como este
http://example.org/index.php?action=replyToEmailId&emailId=123123123
Quando clico na célula, uma nova guia é aberta com o URL correto.
Mas: Na verdade, o URL está sendo chamado três vezes (notei que, em primeiro lugar, três emails foram enviados com um pequeno atraso).
Eu tentei descobrir de onde isso veio, colocando os Cabeçalhos HTTP em um arquivo. Descobriu-se, excel chama o hiperlink internamente momentos antes que abra o link em um navegador. Além disso, os cabeçalhos Http fornecidos diferem do pedido final.
Primeiro pedido oculto
Esta é a primeira requisição usando o método de requisição HTTP HEAD:
{
"HTTP_USER_AGENT": "Microsoft Office Excel 2014 (16.0.10730) Windows NT 10.0",
"HTTP_X_OFFICE_MAJOR_VERSION": "16",
"HTTP_X_MS_COOKIEURI_REQUESTED": "t",
"HTTP_X_FEATUREVERSION": "1",
"HTTP_ACCEPT_AUTH": "badger,Wlid1.1,Bearer",
"REMOTE_PORT": "50216",
"REQUEST_METHOD": "HEAD",
"REQUEST_TIME_FLOAT": 1537284526.406,
"REQUEST_TIME": 1537284526
}
The HEAD method is identical to GET except that the server MUST NOT
return a message-body in the response.
source: [w3.org][1]
Segunda solicitação oculta
O segundo pedido é difícil de identificar, parece que o Excel zomba de vários agentes de usuário:
{
"HTTP_ACCEPT": "*\/*",
"HTTP_USER_AGENT": "Mozilla\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office)",
"HTTP_ACCEPT_ENCODING": "gzip, deflate",
"REMOTE_PORT": "50221",
"REQUEST_METHOD": "GET",
"REQUEST_TIME_FLOAT": 1537284527.807,
"REQUEST_TIME": 1537284527
}
Pergunta
Como evitar esse comportamento no lado do Excel?
(Claro que eu posso evitar isso no meu script PHP bloqueando o HTTP_USER_AGENT contendo " ms-office " ou o REQUEST_METHOD " HEAD ", mas eu prefiro uma limpeza solução).
Notas laterais
UPDATE # 1
Acabei de encontrar essa SO pergunta, que descreve o mesmo comportamento: link
UPDATE # 2
Enquanto me aprofundo nisso eu encontro mais e mais tipos de SO -threads, assim, o que dá uma boa descrição desse "recurso": link
Porém, há uma pequena diferença. O MÉTODO DE PEDIDO do primeiro pedido no meu caso é CABEÇA, não OPÇÃO como na resposta acima mencionada. De qualquer forma, isso ainda não me ajuda a resolver o problema.
UPDATE # 3
Ao tentar reproduzir isso, descobri que não há dois, mas três solicitações feitas.