ServerXMLHTTP запрашивает получение данных, но не возвращает URL последней страницы после перенаправления 301

Я пытаюсь сделать приложение LINK FINDER в ASP
Работающий делится на 5 ступеней

  1. Отправьте http-запрос на сервер www.foo.com
  2. Проверьте статус запроса
  3. Если его 200, то перейдите к шагу 4, в противном случае вы увидите ошибку
  4. Разобрать всю ссылку
  5. Send http request to server to parsed link

Я могу сделать первые 4 шага, но столкнувшись с проблемой в 5-м шаге

Я получаю 3 типа ссылок

1.) абсолютная ссылка: http://www.foo.com/file.asp
2.) ссылки из корневого каталога, которым необходимо доменное имя, например /folder2/file2.asp
3.) Относительная ссылка: ../file3.asp

Вызов

Когда я запрашиваю www.foo.com, который 301 перенаправляется на www.foo.com/folder3/folder3/file3.asp

Я получаю html-содержимое перенаправленной страницы, но не получаю перенаправленный URL и не могу проверить ссылки 3-го типа

Используя следующий код

Set ServerXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
ServerXmlHttp.open "GET", "http://www.foo.com"
ServerXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
ServerXmlHttp.send PostData
If ServerXmlHttp.status = 200 Then
 //My CODE

Надеюсь на быстрый ответ... или любую другую идею для поиска ссылок в asp, vb.net

1 ответ

Решение

Это вне возможностей ServerXMLHTTP.
Вместо этого вы должны использовать IWinHttpRequest или другой сторонний компонент, способный управлять перенаправлениями.
В следующем примере req.Option(WHR_URL) возвращает текущий URL, даже если перенаправлен.
вариант req.option(WHR_EnableRedirects) является True по умолчанию, как ServerXMLHTTP.
Итак, я добавил закомментированную строку, показывающую, как отключить перенаправления.

Const WHR_URL = 1
Const WHR_EnableRedirects = 6
'Enum constants are listed at http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx
Dim req
Set req = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
    'req.Option(WHR_EnableRedirects) = False 'don't follow the redirects
    req.open "GET", "http://www.foo.com", False
    req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.send PostData
If req.Status = 200 Then
    Response.Write "Last URL : " & req.Option(WHR_URL)
End If
Другие вопросы по тегам