Почему некоторые сайты не загружаются через XMLHTTPREQUEST с использованием серверного сценария (ASP), но я могу загрузить с помощью JavaScript? - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь загрузить следующие тестовые URL с помощью Classic ASP через xmlhttprequest. Но два сайта не будут загружаться. Я знаю, что скрипт работает, потому что я могу запустить некоторые сайты, но некоторые не будут загружаться. Любое объяснение?

Я загрузил эти сайты с Javascript, и они действительно загружаются (код не включен, но стандартный AJAX или простой JS-скрипт). Так почему бы работать на стороне клиента, а не на стороне сервера (ASP)?

'rss_url = "https://www.nationalgeographic.com/science/2019/06/opal-fossils-reveal-new-species-dinosaur-australia-fostoria" 'THiS URL DOES NOT LOAD
rss_url = "https://www.nbcnews.com/news/us-news/ex-minneapolis-officer-who-killed-justine-damond-sentenced-12-5-n1013926" 'THIS URL DOES NOT LOAD
'rss_url = "https://www.reuters.com/article/us-usa-saudi-arms/republican-democratic-senators-seek-to-block-trump-saudi-arms-sales-idUSKCN1T61PL" 'THIS URL LOADS

Dim objHTTP
Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP.6.0")
    Err.Clear ' shouldn't be needed; can't hurt
    ON ERROR RESUME NEXT
objHTTP.Open "GET", rss_url, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
'objHTTP.setRequestHeader "Content-type", "text/html"
 aErr = Array(Err.Number, Err.Description)
   On Error GoTo 0
    If 0 = aErr(0) Then
      On Error Resume Next
objHTTP.Send
aErr = Array(Err.Number, Err.Description)
      On Error GoTo 0
       Select Case True
         Case 0 <> aErr(0)
           response.write "send failed:" &  aErr(0) & aErr(1)
         Case 200 = objHTTP.status
           response.write rss_url & objHTTP.status & objHTTP.statusText
         Case Else
           response.write "further work needed:"
           response.write rss_url & objHTTP.status & objHTTP.statusText
       End Select
 Else
       response.write "open failed:" & aErr(0) & aErr(1)
    End If       

    'ON ERROR GOTO 0
    If Err.Number <> 0 Then
        Response.Write "NO feed from ..."
    end if
    if objHTTP.Status = 200 Then sdata = BinaryToString(objHTTP.ResponseBody)
     response.write sdata & "<hr>"
Set objHTTP = Nothing

Function BinaryToString(byVal Binary)
    '--- Converts the binary content to text using ADODB Stream

    '--- Set the return value in case of error
    BinaryToString = ""

    '--- Creates ADODB Stream
    Dim BinaryStream
    Set BinaryStream = CreateObject("ADODB.Stream")

    '--- Specify stream type.
    BinaryStream.Type = 1 '--- adTypeBinary

    '--- Open the stream And write text/string data To the object
    BinaryStream.Open
    BinaryStream.Write Binary

    '--- Change stream type to text
    BinaryStream.Position = 0
    BinaryStream.Type = 2 '--- adTypeText

    '--- Specify charset for the source text (unicode) data.
    BinaryStream.CharSet = "UTF-8"

    '--- Return converted text from the object
    BinaryToString = BinaryStream.ReadText
End Function 

1 Ответ

0 голосов
/ 10 июня 2019

Попробуйте это (из этого ответа)

Function GetTextFromUrl(url)
  Dim oXMLHTTP
  Dim strStatusTest
  Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.3.0")
  oXMLHTTP.Open "GET", url, False
  oXMLHTTP.Send
  If oXMLHTTP.Status = 200 Then
    GetTextFromUrl = oXMLHTTP.responseText
  End If
End Function

Dim sResult : sResult = GetTextFromUrl("https://www.nbcnews.com/news/us-news/ex-minneapolis-officer-who-killed-justine-damond-sentenced-12-5-n1013926")
Response.Write sResult

У меня отлично работает, берет страницу и показывает ее.

...