David Mitchell wrote:
tom arneson wrote:
The lab works for me and I can read data from the J website, however when I
try the site from which I need the data it hits an error:

   0 webget 'http://minutewar.gpsgames.org/Game032/board.htm'
|ENOTCONN: sdcheck
|   (sderror y)    13!:8[3

When I use sdgethostbyname on the site which I want, I get:

   mw=: sdcheck sdgethostbyname 'http://minutewar.gpsgames.org'
   mw
--T---------------┐
│2│255.255.255.255│
L-+----------------
Does anyone know what I should do?

Tom Arneson
http://tomarneson.com

   mw=: sdcheck sdgethostbyname 'minutewar.gpsgames.org'
   mw
┌─┬─────────────┐
│2│205.214.86.20│
└─┴─────────────┘

   0 webget 'minutewar.gpsgames.org/Game032/board.htm'
HTTP/1.1 404 Not Found

It looks like webget needs a bit of help, IE can access the URL just fine.


A quick and dirty:

NB. =========================================================
NB.      [display] webget url
NB. Return document specified by url.  Url
NB. is:   host[:port]/path
NB. if display is 1, display a progress bar
NB. showing how much of the file has been
NB. received.  Default display is 1.
webget=: verb define
1 webget y
:
'host path'=. (({.;}.)~ i.&'/') y
if. x=0 do. wd=. ] end.  NB. skip windowing stuff
host=. 2{.<;._1 ':',host,':80'
host=. ({.host),".&.>{:host
len=._1
NB. if. 0=#$x=. ('GET ',path,' HTTP/1.0',CR,LF) webreq host=. ({.host),".&.>{:host do. x return. end.
NB. if. -.'HTTP/1.1 2'-:10{.>{.x=. <;._2 x-.CR do. >{.x return. end.
NB. len=. ".>{:;:>{.(((<'content-length:')-:&> 15{.&.>tolower&.>x)#x),<'Content-length: _1'
if. 0~:{.sk=. conn host do. {.sk return. end.
t=.'GET ',(path),' HTTP/1.1',CR,LF,'Accept: */*',CR,LF
t=.t,'Referer: http://1.2.3.4',CR,LF,'Accept-Language: EN-US',CR,LF
t=.t,'User-Agent: Mozilla/4.0 '
t=.t,'(compatible: msie 6.0; Windows NT 5.1;'
t=.t,'SV1)',CR,LF,'Host:',(,>0{host),CR,LF,'Connection: Keep-Alive',CR,LF
t send sk=. {:sk
wd 'pc webget;pn "',y,'";xywh 0 0 155 12;cc pb progress'
wd 'xywh 0 12 155 12;cc out static;setfont out "MS Sans Serif" 12;pcenter;pas 0 0;pshow'
if. len=_1 do. wd 'set out *Receiving unknown number of bytes.' end.
z=. ''
while. 1 do.
  sdcheck sdselect sk;'';'';60000
  if.0=#n=. >{. sdcheck sdrecv sk,10240,0 do. break. end.
  z=. z,n
  if. len~:_1 do.
    wd 'set pb ',p=. ":<.100*(#z)%len
    wd 'set out *Received: ',(":#z),'/',(":len),' (',p,'%)'
  end.
end.
wd 'pclose'
z[sdclose sk
)

NB. Mind the text wrapping, if any
--
Regards,
David Mitchell
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to