Тайм-аут запроса VBA-Web - PullRequest
       2

Тайм-аут запроса VBA-Web

1 голос
/ 05 ноября 2019

У меня есть надстройка Excel, созданная с использованием VBA, и один из моих пользователей испытывает тайм-ауты запроса при попытке публикации в моем облачном API. Я использую веб-инструменты VBA https://github.com/VBA-tools/VBA-Web для выполнения HTTP-запросов.

Dim Request As New WebRequest
Request.Resource = Resource 'my api endpoint
Request.Method = WebMethod.HttpPost
Request.Format = WebFormat.Json
Request.ResponseFormat = WebFormat.Json
Request.AddHeader "Authorization", "Bearer " & SessionKey

Client.TimeoutMs = 15000

Set Request.Body = Body 'a dictionary with user data

Dim Response As WebResponse
Set Response = Client.Execute(Request)

If Response.StatusCode <> Ok Then
    Debug.Print Response.StatusCode
    Debug.Print Response.StatusDescription
End If

Я попросил пользователя прислать мне свои журналы, и они выглядят так:

Response.StatusCode
Response.StatusDescription

>> 408
>> Request Timeout: The operation timed out

Первоначально я предполагал, что это проблема брандмауэра, потому что никто не сообщил об этой проблеме, кроме одной группы пользователей (расположенной в одном здании), но я попросил их перейти по URL-адресу в их интернет-браузере, и ониудалось получить ответ.

Это необычно, поскольку я установил период ожидания по умолчанию равным 15 секундам, и, тем не менее, этот ответ появляется практически сразу после выполнения запроса. Я также ожидал увидеть журналы от моего API о том, что был сделан запрос, но я не вижу ни одного (я использую AWS API Gateway).

Мне интересно, блокируется ли Excel выполнение сетевых запросов, это поведение по умолчанию на некоторых машинах Windows? Есть ли способ проверить это в VBA? Кроме того, похоже, что VBA-Web обобщает диапазон кодов состояния как 408 (https://github.com/VBA-tools/VBA-Web/blob/eb857f0dee739ff4a55cfae80b24b82418aee816/src/WebClient.cls#L345-L352), Кто-нибудь знает, почему они будут возвращены?

1 Ответ

1 голос
/ 05 ноября 2019

Попробуйте сменить библиотеку.

Я имел дело со многими API сервисами, и, по моему опыту, если он работает в браузере, это почти наверняка связано с библиотекой, которую вы используете, и с тем, как он обрабатывает запрос, что в данном случаеis WinHttpRequest 5.1.

Я бы предложил использовать альтернативную библиотеку для отправки ваших данных и посмотреть, работает ли она, например MSXML2.XMLHTTP60. В этом примере вы отправляете запрос GET (полезно посмотреть, сможете ли вы связаться с сервером):

Sub tester()
Dim objCON As New MSXML2.XMLHTTP60
Dim URL As String

    URL = "http://www.myurl.com"

    objCON.Open "GET", URL, False
    objCON.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    objCON.send 

    MsgBox (objCON.responseText)
End Sub

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...