找回密码
 加入
搜索
查看: 5186|回复: 5

[网络通信] Until $a[4] = -1 ;此处出错,为什么?

[复制链接]
发表于 2014-5-12 21:30:24 | 显示全部楼层 |阅读模式
此段代码是反复post得到最终的url跳转地址,可是为什么$a[4]=-1出错了呢?

#include "WinHttp_GetRespond.au3"
#include <Array.au3>
$PMID = "23313498"
Local $html = BinaryToString(InetRead("http://www.ncbi.nlm.nih.gov/pubmed/" & $PMID, 1), 1)
Local $icon = StringRegExp($html, '<a href="([^"]+).+?Icon for', 3)
If Not @error Then
        MsgBox(0, 0, "iconurl " & $icon[0])
        Local $a[8]
        $a[4] = $icon[0]
        ;$a[4] = "http://linkinghub.elsevier.com/retrieve/pii/S0022-3913(14)00034-1";出错????????????
        Do
                $returnHead = $a[4]
                _ArrayDisplay($a)
                $a = _get($a[4])
        Until $a[4] = -1 ;此处出错,为什么?
        $afinal = $returnHead
        MsgBox(48, "Final", $afinal)
EndIf

Func _get($sdurl, $sdcookie = "", $sdmoreheader = "");cookie 下载代码

        Local $sdOpen, $sdContext
        $sdOpen = _WinHttpOpen()

        $sdmoreheader = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0"

        $sdContext = _WinHTTP_GetRespond($sdOpen, $sdurl, 0 + 2 + 4 + 8, "", "", $sdcookie, $sdmoreheader)

;~         _ArrayDisplay($rContext)
        If IsArray($sdContext) Then
                Return $sdContext
        Else
                Return ""
        EndIf
        ;_WinHttpCloseHandle($sdOpen)
EndFunc   ;==>_get
发表于 2014-5-12 21:46:50 | 显示全部楼层
回复 1# sex123
#include "WinHttp_GetRespond.au3"
#include <Array.au3>
$PMID = "23313498"
Local $html = BinaryToString(InetRead("http://www.ncbi.nlm.nih.gov/pubmed/" & $PMID, 1), 1)
Local $icon = StringRegExp($html, '<a href="([^"]+).+?Icon for', 3)
If Not @error Then
        MsgBox(0, 0, "iconurl " & $icon[0])
        Local $a[8]
        $a[4] = $icon[0]
        ;$a[4] = "http://linkinghub.elsevier.com/retrieve/pii/S0022-3913(14)00034-1";出错????????????
        Do
                $returnHead = $a[4]
                _ArrayDisplay($a)
                $a = _get($a[4])
                                If Not IsArray($a) Then MsgBox(0, '', "我已经不是数组了,要出错了~")
        Until $a[4] = -1 ;此处出错,为什么?
        $afinal = $returnHead
        MsgBox(48, "Final", $afinal)
EndIf
 
Func _get($sdurl, $sdcookie = "", $sdmoreheader = "");cookie 下载代码
 
        Local $sdOpen, $sdContext
        $sdOpen = _WinHttpOpen()
 
        $sdmoreheader = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0"
 
        $sdContext = _WinHTTP_GetRespond($sdOpen, $sdurl, 0 + 2 + 4 + 8, "", "", $sdcookie, $sdmoreheader)
 
;~      _ArrayDisplay($rContext)
        If IsArray($sdContext) Then
                Return $sdContext
        Else
                Return ""
        EndIf
        ;_WinHttpCloseHandle($sdOpen)
EndFunc   ;==>_get
 楼主| 发表于 2014-5-12 21:54:52 | 显示全部楼层
晕,我知道最后一定是post后没有返回数组,所以出错,我是想问怎么办?怎么样反复post,最后得到$a[4]=-1,即没有再跳转,而不是返回不了数组,或者这样问,为什么返回不了数组,怎么避免?
 楼主| 发表于 2014-5-12 21:59:00 | 显示全部楼层
我自已先加一个这个吧,真奇怪,如果post后,没有跳转,不是应该返回-1停止吗,怎么返回不出数组呢?

If Not IsArray($a) Then ExitLoop
 楼主| 发表于 2014-5-12 22:27:38 | 显示全部楼层
@error值为2
发表于 2014-5-13 17:14:02 | 显示全部楼层
本帖最后由 shqf 于 2014-5-13 17:23 编辑

因为最后一次函数返回的是空串,第14句再赋值给$a,$a就变成了非数组变量了,故出错。简单点可这样改:32 句后插入$a[4] = -1, 原33句改成Return $a。不过总感觉数组用得有点儿乱。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-2 09:09 , Processed in 0.078037 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表