Code: Select all
Procedure getHTTPSize(url.s,iteration.i = 1)
Debug url
Protected size.i,httpCode.i,header.s,headers.s,i.i
If iteration >= 10 : ProcedureReturn : EndIf
headers = GetHTTPHeader(url)
httpCode = Val(StringField(StringField(headers,1,Chr(10)),2," "))
Select httpCode
Case 200:
For i = 1 To CountString(headers,Chr(10))+1
header = Trim(StringField(headers,i,Chr(10)),Chr(13))
If FindString(header,"Content-Length",1,#PB_String_NoCase) = 1
ProcedureReturn Val(StringField(header,2," "))
EndIf
Next
Default:
For i = 1 To CountString(headers,Chr(10))+1
header = Trim(StringField(headers,i,Chr(10)),Chr(13))
If FindString(header,"Location:",1,#PB_String_NoCase) = 1
If FindString(StringField(header,2," "),"://") ; normal redirect
ProcedureReturn getHTTPSize(StringField(header,2," "),iteration + 1)
EndIf
If Left(StringField(header,2," "),1) = "/" ; absolute redirect
If GetURLPart(url,#PB_URL_Port)
ProcedureReturn getHTTPSize(GetURLPart(url,#PB_URL_Protocol) + "://" +
GetURLPart(url,#PB_URL_Site) + ":" +
GetURLPart(url,#PB_URL_Port) +
StringField(header,2," "),iteration + 1)
Else
ProcedureReturn getHTTPSize(GetURLPart(url,#PB_URL_Protocol) + "://" +
GetURLPart(url,#PB_URL_Site) +
StringField(header,2," "),iteration + 1)
EndIf
Else ; relative redirect
ProcedureReturn getHTTPSize(url + StringField(header,2," "),iteration + 1)
EndIf
EndIf
Next
ProcedureReturn
EndSelect
EndProcedure