Какие HTTP-запросы используются на платформе Wildberries?

Я разрабатываю программу на VBA для получения данных с Wildberries, в которой используется цикл для изменения токенов запросов. В коде представлен следующая логика:

```vba
For roww = 1 To 6
    Set http = CreateObject("MSXML2.XMLHTTP")
    On Error GoTo ErrorHandler
    http.Open "GET", url, False
    http.setRequestHeader "Content-type", "application/json"
    http.setRequestHeader "Accept", "application/json"
    token = .Worksheets("Токен").Range("A" & roww).Value
    texx = ""
    http.setRequestHeader "Authorization", "Bearer " + Token
    http.send
    Application.Wait (Now + TimeValue("00:00:03"))
    If http.Status = 200 Then texx = http.responseText
Next
```

После выполнения этой программы, переменная `texx` получает ответы от Wildberries, и для каждого из шести токенов должен быть свой ответ. На моем компьютере с Windows 10 Pro и Office Professional Plus 2016 все работает как надо. Однако на другом ПК с Windows 10 Home и тем же Office возникла проблема: все ответы одинаковы, и они соответствуют токену, который используется в первом цикле. При этом, если я закрываю и открываю Excel файл, или меняю порядок токенов в цикле, ответы все равно совпадают с первым — уже другим — токеном в цикле.

Кто-нибудь сталкивался с подобной ситуацией? Знаете ли вы, в чем может быть проблема?
  • 12 ноября 2024 г. 9:03
Ответы на вопрос 1
Проблема, с которой вы столкнулись, может быть связана с различными факторами, включая настройки безопасности, кэширование запросов HTTP, проблему с многопоточностью или особенностями реализации VBA на разных версиях Windows и Office.

Вот несколько причин и возможные решения:

1. **Кэширование HTTP-запросов**:
   - Некоторые версии библиотек MSXML могут кешировать HTTP-запросы. Вы можете попробовать добавить заголовок, который отключает кэширование. Например:
     ```vba
     http.setRequestHeader "Cache-Control", "no-cache"
     ```

2. **Состояние объекта HTTP**:
   - Убедитесь, что каждый раз создается новый объект `http`. В вашем коде видно, что вы создаете новый объект в начале цикла, но если где-то происходит ошибка и объект не обновляется, это может вызвать проблемы. Убедитесь, что конструкция `Set http = CreateObject("MSXML2.XMLHTTP")` действительно выполняется для каждого запроса.

3. **Проблемы с многопоточностью**:
   - В Excel могут быть проблемы с многопоточностью, особенно с асинхронными запросами. Хотя в вашем случае используется синхронный вызов `http.Open ...`, этот момент стоит проверить.

4. **Проверка правильности токена**:
   - Убедитесь, что правильно передается токен из Excel. Попробуйте сначала вывести на экран или в строку отладочной информации значение токена перед отправкой запроса, чтобы убедиться в его корректности:
     ```vba
     Debug.Print "Токен: " & token
     ```

5. **Используйте другой метод запроса**:
   - Если проблема сохраняется, попробуйте использовать библиотеку `WinHttp`, которая может иметь другую реализацию и не включать кэширование:
     ```vba
     Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
     ```

6. **Обновление Office или Windows**:
   - Убедитесь, что на обоих компьютерах установлены последние обновления Office и Windows, так как в старых версиях могут быть ошибки.

7. **Попробуйте на другом ПК**:
   - Если возможно, протестируйте скрипт на третьем компьютере, чтобы выявить, связана ли проблема с конкретной машиной или конфигурацией.

Если указанные варианты не помогают, попробуйте добавить дополнительную отладочную информацию, чтобы лучше понять, где именно происходит сбой.
Похожие вопросы