我编写了一个程序来从国家证券交易所下载文本文件。这是下载功能:
downloadNseBhav: func [Date] [
NSE_Url: to-url rejoin [
"http://nseindia.com/content/historical/EQUITIES/"
(uppercase form-date Date "%Y/%b/") "cm" Sd "bhav.csv.zip"
; format NSE Bhavcopy url
]
either error? try [
write/binary to-file rejoin ["./NSE/" Sd "bhav.csv.zip"]
read/binary NSE_Url
; download bhavcopy zip file to disk in ./NSE folder
][
append Log/text "Server made a boo boo ......NSE Bhavcopy not found^/^/"
scroll-text Log
Exit
][
append Log/text "Downloaded NSE Bhavcopy Zip^/"
scroll-text Log
]
]
尽管所需的文件在那里,但我多次收到未找到文件的消息。当请求多个文件并且其中一些没有下载时,这很烦人。如果我再试一次,我会收到文件。
我阅读了wait
Rebol 2 文档中的命令,发现等待是打开端口的默认设置。我究竟做错了什么?有没有办法让 Rebol 等待几秒钟以获得服务器的响应?
编辑 - 每天的活动都有一个文件。说,我要下载 10 天(1 月 1 日到 1 月 10 日。然后,我得到了几天的文件和几天的错误。如果我立即再次下载相同的日期,我会得到一些丢失的文件。第三和第四尝试将获取所有剩余的文件。但是,对于任何日期,每次找不到文件错误都是随机的。
出色地,
- 正如tomc所说,我将超时时间增加到10秒。
- 根据 Graham Chiu 的建议,我还收集了那些失败的列表
正如 Hostilfork 所建议的,我无法使用 Wireshark,但我可以通过稍微更改代码来捕获错误,如下所示。
either error? err: try [ BC: read/binary NSE_Url ] ; download bhavcopy zip file to disk in ./NSE folder [ err: disarm err probe err write/append %log.txt rejoin ["NSE EQUITIES/bhavcopy not found " DateYmd "^/"] Exit ] [] ]
此后,我从 2015 年 12 月 1 日到 2015 年 12 月 15 日下载了两次。
第一次尝试失败的列表 -
NSE EQUITIES/bhavcopy not found 2015-12-08
NSE EQUITIES/bhavcopy not found 2015-12-09
第二次尝试失败的列表-
NSE EQUITIES/bhavcopy not found 2015-12-01
NSE EQUITIES/bhavcopy not found 2015-12-02
所有情况的错误消息都是相同的-
emake object! [
code: 507
type: 'access
id: 'no-connect
arg1: "nseindia.com"
arg2: none
arg3: none
near: [BC: read/binary NSE_Url]
where: 'open-proto
]
请原谅我之前没有正确捕获错误。我是 Rebol 的新手。
我不知道有什么解决方案。我有一个 8 mbps 的网络连接,它运行良好。
出于好奇,我打开了 Rebol 控制台并连接了 google.co.in。这是同时尝试两次的结果——
test: read http:// google . co. in
Access Error: Cannot connect to google.co.in
Where: open-proto
Near: test: read http://google.co.in
test: read http://google.co.in
== {<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-IN"><head><meta content="text/html; charset=UTF...
因此,到目前为止,我正在遵循这两个建议。
我又学到了一件事——捕获错误不是这样工作的——
either error? err: try [
write/binary to-file rejoin ["./NSE/" Sd "bhav.csv.zip"]
read/binary NSE_Url]
必须将文件读入变量,否则如果实际接收到文件,Rebol2 会因错误而崩溃 - err: 需要一个值。