Advertisement

12.11.2007 at 06:10AM PST, ID: 23015426
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

Handle redirect in xmlhttp response

Tags: redirect, xmlhttp
Dear All,

I try to download an excel file from a website and i only get it back after going through a redirect page that contains a wait in javascript.

I use the xmlhttp object for this as it turned out the result is the same using

- msinet control
- excel's workbooks.open
- inet dll

My code is like

Dim oXMLHTTP As object ' MSXML2.XMLHTTP26

On Error GoTo errhandle
 
  Set oXMLHTTP = CreateObject("Microsoft.XMLHTTP")
  oXMLHTTP.Open "GET", myUrl, False
  oXMLHTTP.send
 
  ' return bytearray
  strhtml = oXMLHTTP.responseText

  Set oXMLHTTP = Nothing
  Exit Function
 
errhandle:
  ' do something here  
  Set oXMLHTTP = Nothing

the strhtml returns a page with the redirect to itself i do not know how to wait for the timeout or get the file in another way

tried to catch the download file dialog from IE, but couldn't get that working either with the findwindow API

hope someone can help me to get this working.

Thanks for your time
Brian
Start your free trial to view this solution
Question Stats
Zone: Programming
Question Asked By: bruintje
Solution Provided By: PaulHews
Participating Experts: 1
Solution Grade: A
Views: 32
Translate:
Loading Advertisement...
12.11.2007 at 06:27AM PST, ID: 20449488

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
12.11.2007 at 08:34AM PST, ID: 20450429

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
12.11.2007 at 08:57AM PST, ID: 20450644

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
12.11.2007 at 11:23AM PST, ID: 20451819

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
12.11.2007 at 11:57AM PST, ID: 20452137

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
12.11.2007 at 12:04PM PST, ID: 20452205

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
12.11.2007 at 01:40PM PST, ID: 20453080

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
Loading Advertisement...
Microsoft
  • Internet Protocols
  • Applications
  • Development
  • OS
  • Hardware
  • Windows Security
Apple
  • Operating Systems
  • Hardware
  • Programming
  • Networking
  • Software
Internet
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Spy / Ad Blockers
  • Web Browsers
  • New Net Users
  • Web Development
  • Chat / IM
  • Anti Spam
  • Web Servers
  • Anti-Virus
  • Email Clients
Gamers
  • Tips
  • Online / MMORPG
  • Puzzle
  • Emulators
  • Action / Adventure
  • Role Playing
  • Consoles
  • Game Programming
  • Strategy
  • Sports
  • Misc
  • Computer Games
Digital Living
  • Hardware
  • New Net Users
  • New Users
  • Software
  • Digital Music
  • Gaming World
  • Home Security
  • Apple
  • Networking Hardware
Virus & Spyware
  • Vulnerabilities
  • IDS
  • Encryption
  • Anti-Virus
  • Operating Systems Security
  • Software Firewalls
  • WebApplications
  • Cell Phones
  • Operating Systems
  • Internet
  • Hardware Firewalls
Hardware
  • Handhelds / PDAs
  • Displays / Monitors
  • Components
  • Networking Hardware
  • Peripherals
  • Laptops/Notebooks
  • Storage
  • Servers
  • Desktops
  • New Users
  • Misc
  • Apple
Software
  • System Utilities
  • Industry Specific
  • Network Management
  • Photos / Graphics
  • Page Layout
  • VMWare
  • Misc
  • Web Development
  • OS
  • CYGWIN
  • Voice Recognition
  • Message Queue
  • Quality Assurance
  • Security
  • Firewalls
  • MultiMedia Applications
  • Development
  • Database
  • Office / Productivity
  • Business Management
  • OS/2 Apps
  • Server Software
  • Internet / Email
ITPro
  • OS
  • Storage
  • Encryption
  • Operating Systems Security
  • Apple Hardware
  • Laptops & Notebooks
  • Servers
  • Networking Hardware
  • Peripherals
  • Devices
  • Displays / Monitors
  • WebTrends / Stats
  • Search Engines
  • Firewalls
  • WebApplications
  • IDS
  • Vulnerabilities
  • Email Clients
  • File Sharing
  • Spy / Ad Blockers
  • Web Browsers
  • Web Servers
  • Networking
  • Anti-Virus
  • Chat / IM
  • Anti Spam
Developer
  • Web Servers
  • Web Browsers
  • Game Programming
  • Dev Tools
  • Industry Specific
  • Office / Productivity
  • Database
  • CYGWIN
  • Web Development
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Programming
  • Content Management
  • Application Servers
  • Protocols
Storage
  • Removable Backup Media
  • Storage Technology
  • Servers
  • Grid
  • Remote Access
  • Backup / Restore
  • Misc
  • Hard Drives
OS
  • Miscellaneous
  • Security
  • Development
  • Linux
  • VMWare
  • MainFrame OS
  • Unix
  • Apple
  • OS / 2
  • AS / 400
  • BeOS
  • Microsoft
  • VMS / OpenVMS
Database
  • Oracle
  • Miscellaneous
  • MySQL
  • Software
  • Sybase
  • Contact Management
  • PostgreSQL
  • Data Manipulation
  • Clarion
  • InterSystems Cache
  • Siebel
  • MUMPS
  • OLAP
  • SQLBase
  • SAS
  • GIS & GPS
  • 4GL
  • Berkeley DB
  • DB2
  • Informix
  • Interbase / Firebird
  • FoxPro
  • Reporting
  • LDAP
  • Filemaker Pro
  • MS SQL Server
  • dBase
  • MS Access
Security
  • Misc
  • Web Browsers
  • Software Firewalls
  • Operating Systems Security
  • File Sharing
  • Spy / Ad Blockers
  • Vulnerabilities
  • WebApplications
  • IDS
  • Anti-Virus
  • Encryption
  • Anti Spam
  • Email Clients
  • VPN
  • Chat / IM
Programming
  • Editors IDEs
  • Installation
  • Handhelds / PDAs
  • Multimedia Programming
  • System / Kernel
  • Algorithms
  • Game
  • Signal Processing
  • Project Management
  • Open Source
  • Database
  • Misc
  • Languages
  • Processor Platforms
  • Theory
Web Development
  • Scripting
  • Blogs
  • Web Servers
  • Software
  • Search Engines
  • Web Graphics
  • Images
  • Internet Marketing
  • Images and Photos
  • Components
  • Document Imaging
  • Web Languages/Standards
  • Illustration
  • WebApplications
  • Fonts
  • WebTrends / Stats
  • Authoring
  • Digital Camera Software
  • Miscellaneous
Networking
  • Protocols
  • Apple Networking
  • Network Management
  • Message Queue
  • Application Servers
  • Content Management
  • File Servers
  • Email Servers
  • Misc
  • Java Editors & IDEs
  • Wireless
  • Networking Hardware
  • Backup / Restore
  • System Utilities
  • ISPs & Hosting
  • Web Servers
  • Storage Technology
  • Removable Backup Media
  • Servers
  • Broadband
  • Grid
  • OS / 2
  • Novell Netware
  • Unix Networking
  • Windows Networking
  • Security
  • Telecommunications
  • Operating Systems
  • Linux Networking
Other
  • Community Advisor
  • Lounge
  • Community Support
  • New Net Users
  • Philosophy / Religion
  • Math / Science
  • Miscellaneous
  • URLs
  • Expert Lounge
  • Politics
  • Puzzles / Riddles
Community Support
  • Suggestions
  • New to EE
  • New Topics
  • Community Advisor
  • CleanUp
  • Announcements
  • General
  • Feedback
  • Input
  • EE Bugs
 
12.11.2007 at 06:27AM PST, ID: 20449488

Rank: Genius

The redirect page must have a string you can test for, so that you can tell you don't have the right content.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
 
 
...
    Dim bContentIsOk As Boolean
    Dim oXMLHTTP As Object ' MSXML2.XMLHTTP26
 
On Error GoTo errhandle
 
    Set oXMLHTTP = CreateObject("Microsoft.XMLHTTP")
    bContentIsOk = False
    Do Until bContentIsOk
        
        oXMLHTTP.Open "GET", myUrl, False
        oXMLHTTP.send
        
        ' return bytearray
        strhtml = oXMLHTTP.responseText
        If InStr(1, strhtml, "this is a string I know is in the redirect page") = 0 Then
            bContentIsOk = True
        Else
            Sleep 10000  'However long the javascript wait is
        End If
        
    Loop
    
    Set oXMLHTTP = Nothing
    Exit Function
    
errhandle:
    ' do something here
    Set oXMLHTTP = Nothing
Open in New Window
Accepted Solution
 
12.11.2007 at 08:34AM PST, ID: 20450429
thanks Paul,

that certainly looked like the trick but it does not work

i give you the url i'm trying to download

http://excel2.smarthouse.de/ExcelWriter.aspx?xls_cu=vontobel&xls_co=productlist&xls_s=derinet-chDE&pageid=40&xls_file=1e52be0f18ce644960f852fa59628cd8

i encounter on machines that have not downloaded that file through the browser the problem of not being able to download the xls but the timeout page instead

of course on each request the key at the end is different so it works at times but i suspect not when the file is not yet cached from a previous request

regards
Brian
 
12.11.2007 at 08:57AM PST, ID: 20450644

Rank: Genius

Try this method:

Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" _
        Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
        ByVal szURL As String, ByVal szFileName As String, _
        ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private Sub Command1_Click()
    Dim myURL As String
    myURL = "http://excel2.smarthouse.de/ExcelWriter.aspx?xls_cu=vontobel&xls_co=productlist&xls_s=derinet-chDE&pageid=40&xls_file=1e52be0f18ce644960f852fa59628cd8"
    URLDownloadToFile 0, myURL, "C:\temp\test.xls", 0, 0
   
End Sub

 
12.11.2007 at 11:23AM PST, ID: 20451819
no success, either i got the xls back that if you change extension to htm it shows the empty redirect page

this is a frustrating one, but i can't imagine that it is not possible to solve
 
12.11.2007 at 11:57AM PST, ID: 20452137

Rank: Genius

I can't get the javascript wait... All I ever see is the excel file.  Can you post the content of the redirect page?
 
12.11.2007 at 12:04PM PST, ID: 20452205
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
      <title>Vontobel Excel Writer</title>
</head>

<table border="0" width="100%" height="100%">
      <tr>
            <td valign="middle" align="center"></td>
      </tr>
</table>
</body>
<script language="javascript">
<!--
function redirect() {
      location.href = location.href;
}
// -->
</script>
</html>

at first it worked for me too, but after i emptied the ie downloaded files and cache and it started to go against me

it started working again but when it tried it on a different pc it left me in the cold
 
12.11.2007 at 01:40PM PST, ID: 20453080
Hi Paul,

Thanks for the idea of the loop. I also looked further on the net and found the winhttp dll that contains a request object with a redirect property. however, its not working as i expected and still needed the loop and pause (this is a sleep function that convert to seconds). After 3 days on this problem i still hold my breath to see if it still works on a different machine but it looks that it finally is solved. This is my code for anyone interested (needs a reference to the mentioned dll)

Private Function DownloadFile(ByVal myURL As String) As Variant
Dim myReq As WinHttpRequest, hFile, bContentIsOK As Boolean

On Error GoTo errhandle

  bContentIsOK = False
  Do Until bContentIsOK
     
      Set myReq = CreateObject("WinHttp.WinHttpRequest.5.1") 'New WinHttpRequest
      myReq.Option(WinHttpRequestOption_EnableRedirects) = True
      myReq.setTimeouts 30000, 30000, 30000, 30000
      myReq.Open "GET", myURL, True
      myReq.send
      myReq.waitForResponse (100000)
     
      ' return bytearray
      If Len(myReq.responseBody) <> 245 Then
          bContentIsOK = True
      Else
          DoEvents
          Sleep 5000  'However long the javascript wait is
      End If
     
  Loop

  DownloadFile = myReq.responseBody
     
  Set myReq = Nothing
  Exit Function
   
errhandle:
  ' do something here
  Set myReq = Nothing
  errCount = 1
  ErrMsgAdd "xml http part", "Error in getting file from the web." & myURL, Err.Number, Err.Description, errdata
  Err.Clear
  Set myReq = Nothing
End Function

Brian
 
 
12.11.2007 at 02:04PM PST, ID: 20453288
I did this with Microsoft WinHTTP Services reference, but it's probably doable with the xmlhttp component as well (I just wanted to see the headers and such.)

It takes awhile and has to loop a few times before the Excel file is served up... But it's been working here.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
 
Private WithEvents http As WinHttpRequest
 
Private Sub Command1_Click()
    Dim myURL As String
    Dim strKey As String
    Dim Count As Integer
    
    
    myURL = "http://excel2.smarthouse.de/ExcelWriter.aspx?xls_cu=vontobel&xls_co=productlist&xls_s=derinet-chDE&pageid=40"
    Set http = New WinHttpRequest
    http.Open "GET", myURL, False
    http.Send
    
    
    myURL = myURL & "&xls_file="
    
    strKey = fParseBetween(http.ResponseText, "location.href = location.href + '&xls_file=", "';")
    myURL = myURL & strKey
    
    
    Do While InStr(1, http.ResponseText, "function redirect()")
        Sleep 3000
        Count = Count + 1
        http.Open "GET", myURL, False
        http.Send
        Debug.Print Count
    Loop
    
    sPutBytesToFile http.ResponseBody, "C:\temp\test2.xls"
    
    MsgBox "Done"
    
    MsgBox FileLen("C:\temp\test2.xls")
    
    
    
    
End Sub
 
Public Function fParseBetween(ByVal strChk As String, ByVal strFirst As String, ByVal strLast As String, Optional lngStart As Long = 1) As String
    Dim lngPos As Long, lngLen As Long
    
    lngPos = InStr(lngStart, strChk, strFirst, vbTextCompare) + Len(strFirst)
    lngLen = InStr(lngPos, strChk, strLast, vbTextCompare) - lngPos
    
    If lngPos > 0 And lngLen > 0 Then
        fParseBetween = Mid$(strChk, lngPos, lngLen)
        If Len(fParseBetween) > 0 Then
            lngStart = lngStart + Len(fParseBetween)
        End If
    End If
    
End Function
 
Public Sub sPutBytesToFile(byt() As Byte, strPath As String)
    Dim i As Integer
    Dim hFile  As Integer
    If Dir(strPath) <> "" Then
        Kill strPath
    End If
    
    hFile = FreeFile
    Open strPath For Binary As #hFile
    Put #hFile, , byt
    Close #hFile
    
End Sub
Open in New Window
 
 
12.11.2007 at 02:17PM PST, ID: 20453388
Thanks a lot Paul for your hard work,

that is cleaner than my last post as i was already glad that i got something in line with expectations

Always a good thing to be around the Experts :-))))
 
 
 
20080236-EE-VQP-29 / EE_QW_EXPERT_20070906