Запрос на экспорт Mantis BT через «WinHttp.WinHttpRequest.5.1»
-
13-09-2019 - |
Вопрос
Мой начальник попросил меня экспортировать корпоративную базу данных ошибок Mantis в Excel, но он не может предоставить мне доступ к SQL-серверу, и этот процесс необходимо автоматизировать.
ЕДИНСТВЕННОЕ, что я могу использовать, это Excel (без ODBC, без ручного экспорта).
Итак, мне удалось сделать это:
Dim webClient As Object
Dim i As Long, vFF As Long, oResp() As Byte
Dim vLocalFile As String
Dim username As String, password As String
username = "blahblah"
password = "blahblah"
Set webClient = CreateObject("WinHttp.WinHttpRequest.5.1")
// Opening the connection to the application with a POST, containing user, password, and "permanent login" checked
webClient.Open "POST", "http://10.202.157.40/mantisbt-1.1.6/login.php", False
webClient.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
webClient.send ("username=" & username & "&password=" & password & "&perm_login=on")
// Now I set the "project" to "All Projects" (as I want the view to display our 2200 bugs)
webClient.Open "POST", "http://10.202.157.40/mantisbt-1.1.6/set_project.php", False
webClient.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
webClient.send ("project_id=0")
// The problem is, the last query displays 624 bugs instead of 2200, but I noticed when I click on "Advanced Filters" it successfully show the 2200 bugs (tested under a web browser AND Excel : the ResponseText shows them)
webClient.Open "GET", "http://10.202.157.40/mantisbt-1.1.6/view_all_set.php?type=6&view_type=advanced", False
webClient.send
// And NOW I can download the CSV file... (and that's where something is wrong *)
webClient.Open "GET", "http://10.202.157.40/mantisbt-1.1.6/csv_export.php", False
webClient.send
oResp = webClient.responseBody
// Creating a file and then filling it...
vFF = FreeFile
vLocalFile = "_mantis_export.csv"
If Dir(vLocalFile) <> "" Then Kill vLocalFile
Open vLocalFile For Binary As #vFF
Put #vFF, , oResp
Close #vFF
// Freeing memory
Set webClient = Nothing
(* :см. код) В предыдущей строке ResponseText показывал «2200 ошибок», поэтому все было хорошо до последнего запроса (csv_export.php).Сценарий при вызове через браузер показывает точно то же самое, что и страница, которая его вызвала (если на странице обнаружено 2 ошибки, CSV будет содержать 2 ошибки).Из моих 2200 ошибок, показанных в IE/Firefox, CSV приносит мне 2200 ошибок.Но в Excel, даже если ResponseText показывает 2200 ошибок, CSV выдает 624 ошибки...Как будто я не вызывал страницу "Расширенный фильтр" :(
Надеюсь, кто-нибудь меня поймет и поможет ;)
Заранее спасибо,
Дэйвид
Решение
Возможно, вам было бы проще использовать SOAP API?Точка входа находится по адресу http://server/mantis/api/soap/mantisconnect.php .