Download methods

By xorc on Apr 19, 2017

v2 Signal polling microsoft.xmlhttp (COM):
Calls microsoft.xmlhttp comobject asynchronous and dispatches a signal to check the result, which if isn't done yet signals itself again until the response is received, then calls the provided callback when the contents is written to disk.

Performance / Example:
//echo ticks: $ticks | /XMLHTTPRequest "echo ticks: $($ticks,0) result:" http://www.google.com/ google.html
time: 12:57:24 ticks: 51840640
time: 12:57:24 ticks: 51840687 result: XMLHTTPRequest1393273344 $true http://www.google.com/ google.html
Elapsed 47 ticks

alias XMLHTTPRequest {

  var %callback = $1
  var %URI = $2
  var %path = $3

  if (" isin $1) {
    var %callback = $mid($1-,1,$pos($1-,",2))
    var %args = $replace($1-,%callback,)
    tokenize 32 %args
    unset %args

    var %callback = $noqt(%callback)
    var %URI = $1
    var %path = $2
  }

  var %comid = $+(XMLHTTPRequest,$hash($nopath(%path),32))

  if ($com(%comid)) .comclose %comid
  .comopen %comid microsoft.xmlhttp

  noop $com(%comid,Open,4,bstr,GET,bstr,%URI,bool,1)
  noop $com(%comid,Send,1)

  $+(.,timer,%comid) 1 0 .signal -n %comid $qt(%callback) %URI %path
  $+(.,timer,%comid,timeout,timer) 1 10 .timer $+ %comid off 
  $+(.,timer,%comid,timeout,com) 1 10 .comclose %comid
}

on *:SIGNAL:XMLHTTPRequest*: {

  var %comid = $signal
  var %callback = $1
  var %URI = $2
  var %path = $3

  if (" isin $1) {
    var %callback = $mid($1-,1,$pos($1-,",2))
    var %args = $replace($1-,%callback,)
    tokenize 32 %args
    unset %args

    var %callback = $noqt(%callback)
    var %URI = $1
    var %path = $2
  }

  goto $com(%comid,responseText,2)

  :-1 | %callback %comid $false %URI %path | halt
  :0 | $+(.,timer,%comid) 1 0 .signal -n %comid $qt(%callback) %URI %path | halt
  :1
  $+(.,timer,%comid,*) off

  bwrite $5 0 $com(%comid,&binvar).result &binvar

  .comclose %comid

  %callback %comid $true %URI %path
}

v1 Procedural WinHttp.WinHttpRequest.5.1 (COM):
Calls WinHttp.WinHttpRequest.5.1 blocks mIRC until it's done, writes contents to file and returns.

Performance:
//[ $WebClient(http://www.google.com/,google.html) ]
time: 12:28:07, ticks: 70039296
time: 12:28:07, ticks: 70039609
Elapsed: 313 Ticks

Cons:

  • Blocks mIRC
alias WebClient {
  if ($com(WebClient)) .comclose WebClient

  .comopen WebClient WinHttp.WinHttpRequest.5.1

  noop $com(WebClient,Open,1,bstr,GET,bstr,$1)
  noop $com(WebClient,Send,1) 
  noop $com(WebClient,WaitForResponse,1)
  noop $com(WebClient,ResponseText,1,bstr,&binvar)
  bwrite $2 0 $com(WebClient, &binvar).result &binvar

  .comclose WebClient
  return $true
}

Comments

Sign in to comment.
happywheelsqa   -  10 days ago

Thank you for sharing this is awesome blog thanks a lot for giving me this great opportunity to write on this.please visit our website I assure you that it will be very useful for you

 Respond  
acacer   -  26 days ago

It's great because of the knowledge you share with us, I will always follow your blog and will share your blog with my friends
bloxorz

 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.