kxing 发表于 2013-10-31 02:40:41

[已解决]求天涯论坛验证码真实地址

本帖最后由 kxing 于 2013-10-31 18:20 编辑

想要做个自动发帖软件,遇到验证码就获取下来显示在GUI上以供输入。
关键是找到验证码的图片点右键属性,那个图片地址访问就报错。
这个是验证码的地址:http://imgcode.tianya.cn/services/ImageCodeService?_r=1383157622897
后面的应该是毫秒的时间戳,au3似乎没有转换毫秒的。。
恳请高人指点,谢谢!

netsmu 发表于 2013-10-31 08:33:44

这个跟时间戳没关系,这个验证码是防刷新防外链的,可能他保存COOKIES了,只有发送COOKIES才能正常显示验证码, 或者他截取了来路了。 你要把来路也发送过去才会显示。比如你先访问
http://passport.tianya.cn/register/default.jsp?sourceURL=http%3A%2F%2Ffocus.tianya.cn%2F
这个网站,然后在验证码那边打开就可以了。
要发送COOKIES和 Referer 保证能获取到验证码。
Referer:http://passport.tianya.cn/register/default.jsp?sourceURL=http%3A%2F%2Ffocus.tianya.cn%2F

Set-Cookie:vk=a9ddfed76e5f8d36; domain=tianya.cn; path=/

kxing 发表于 2013-10-31 11:48:46

感谢楼上的回答。
请问下我是在回复的时候要验证码,Referer也要用这个网址吗?
另外cookies是你提供的字符串固定不变的吗,没弄过cookies,别笑话。。。
多谢!!

kxing 发表于 2013-10-31 14:08:26

恳请楼上能否给个完整的例子呢,能够显示验证码出来。
万分感激》。。。

kxing 发表于 2013-10-31 15:26:56

用这种方式返回的也是错误页面:

$a=_winhttp_getrespond(-1,"http://imgcode.tianya.cn/services/ImageCodeService?_r=1383157622897",2,-1,"Referer: http://passport.tianya.cn/","Set-Cookie:vk=a9ddfed76e5f8d36; domain=tianya.cn; path=/")
msgbox(0,'',$a)求帮助,谢谢!!!

xzxnovice 发表于 2013-10-31 15:50:04

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$file = @ScriptDir & "\00000.gif"
FileDelete($file)

$Form1 = GUICreate("Form1", 300, 200, -1, -1)
$Pic1 = GUICtrlCreatePic("", 80, 30, 140, 50, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$LabelCheck = GUICtrlCreateLabel("看不清图片点击图片更换", 80, 85, 136, 17)
GUISetState(@SW_SHOW)

nRePic()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Pic1
                        nRePic()
        EndSwitch
WEnd

Func nRePic()
        FileDelete($file)
        $httpObj = ObjCreate("winhttp.winhttprequest.5.1")
        $httpObj.open("GET", 'http://imgcode.tianya.cn/services/ImageCodeService',False)
        $httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        $httpObj.setRequestHeader("Referer", "http://passport.tianya.cn/register/default.jsp?sourceURL=http%3A%2F%2Ffocus.tianya.cn%2F")
        $httpObj.Send()
        $HTMLSource = $httpObj.ResponseBody
        $oH = ObjCreate("Adodb.Stream")
        $oH.Type = 1
        $oH.Mode = 3
        $oH.Open
        $oH.write($HTMLSource)
        $oH.SaveToFile($file)
        $oH.Close()
        GUICtrlSetImage($Pic1, $file)
        FileDelete($file)
EndFunc   ;==>nRePic

试试这样

xzxnovice 发表于 2013-10-31 15:50:24

网络问题发重复了,编辑掉。。。。

kxing 发表于 2013-10-31 18:19:23

非常成功,又学到知识了。。。。
谢谢谢谢!!!

kxing 发表于 2013-10-31 19:22:17

本帖最后由 kxing 于 2013-10-31 19:25 编辑

再请问下,为何我获取到的验证码用来回帖总提示验证码错误呢?
是否还要传入其他什么和验证码对应的参数呢?
这是我抓包的post数据:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$file = @ScriptDir & "\00000.gif"
FileDelete($file)

$Form1 = GUICreate("Form1", 300, 200, -1, -1)
guisetbkcolor(0x000000)
$Pic1 = GUICtrlCreatePic("", 80, 30, 140, 50, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$LabelCheck = GUICtrlCreateLabel("看不清图片点击图片更换", 80, 85, 136, 17)
$hCheckcode=guictrlcreateinput("",10,170,60,20)
$hOK=guictrlcreatebutton("submit",70,170,60,20)
GUISetState(@SW_SHOW)

nRePic()

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Pic1
nRePic()

case $hOK
$url="http://bbs.tianya.cn/api?method=bbs.ice.reply"
$data="params.artId=972&params.item=50043&params.appId=bbs&params.appBlock=50043&params.postId=972&params.preUrl=http%3A%2F%2Fbbs.tianya.cn%2Fpost-50043-972-1.shtml&params.preTitle=111111%E3%80%90%E9%A2%A0%E8%A6%86%E6%80%A7%E6%8E%A8%E7%90%86%E3%80%91%E9%87%91%E6%98%93%E6%81%92%E8%A7%A3%E8%AF%BB%E4%B8%80%E5%AE%A1%E5%88%A4%E5%86%B3%E4%B9%A6%EF%BC%88%E5%9B%9B%EF%BC%89%EF%BC%9A%E9%81%97%E6%BC%8F%E7%9A%84%E7%96%91%E7%82%B9%EF%BC%881%EF%BC%89&params.preUserId=55122586&params.preUserName=%E9%87%91%E6%98%93%E6%81%92&params.prePostTime=1383200312000&params.sourceName=%E5%A4%A9%E6%B6%AF%E8%AE%BA%E5%9D%9B&params.type=3&params.bScore=true&params.content=11111%E4%B8%8D%E7%9F%A5%E9%81%93%E8%BF%99%E7%B1%BB%E5%B0%8F%E8%AF%B4%E9%82%A3%E9%87%8C%E6%9C%89%E6%9B%B4%E5%A4%9A%E6%9B%B4%E5%85%A8%E9%9D%A2%E7%9A%84%E3%80%82%E3%80%82%E3%80%82&params.title=111111%E4%B8%8D%E7%9F%A5%E9%81%93%E8%BF%99%E7%B1%BB%E5%B0%8F%E8%AF%B4%E9%82%A3%E9%87%8C%E6%9C%89%E6%9B%B4%E5%A4%9A%E6%9B%B4%E5%85%A8%E9%9D%A2%E7%9A%84%E3%80%82%E3%80%82%E3%80%82&params.bWeiBo=false&params.vCode="&guictrlread($hCheckcode)

$oIE=ObjCreate("microsoft.xmlhttp")
$oIE.Open("POST",$url,false)
$oIE.setRequestHeader("Cache-Control", "no-cache")
$oIE.setRequestHeader("Accept-Language", "zh-cn")
$oIE.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
$oIE.setRequestHeader("Referer",$url)
$oIE.Send($data)
$htm=$oIE.responseText

msgbox(0,'',$htm)

EndSwitch
WEnd

Func nRePic()
FileDelete($file)
$oIE= ObjCreate("winhttp.winhttprequest.5.1")
$oIE.open("GET", 'http://imgcode.tianya.cn/services/ImageCodeService',False)
;$oIE.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oIE.setRequestHeader("Referer", "http://passport.tianya.cn/register/default.jsp?sourceURL=http%3A%2F%2Ffocus.tianya.cn%2F")
$oIE.Send()
$HTMLSource=$oIE.ResponseBody
$oH=ObjCreate("Adodb.Stream")
$oH.Type = 1
$oH.Mode = 3
$oH.Open
$oH.write($HTMLSource)
$oH.SaveToFile($file)
$oH.Close()
GUICtrlSetImage($Pic1, $file)
FileDelete($file)
EndFunc   ;==>nRePic

kxing 发表于 2013-10-31 19:22:50

这是抓包的页面:http://bbs.tianya.cn/post-50043-972-1.shtml

kxing 发表于 2013-11-1 09:23:34

回复 7# xzxnovice

老兄,能否再麻烦指点一二,先谢过了。。。

xzxnovice 发表于 2013-11-1 10:09:59

本帖最后由 xzxnovice 于 2013-11-1 10:15 编辑

回复 11# kxing


1.    ObjCreate("microsoft.xmlhttp")对像程序开始时创建一次就可以了,以后就用这个,不用重新创建,这样会保留登陆后的cookie.

2.    我见你还没登陆怎样回贴?

kxing 发表于 2013-11-1 12:04:24

回复 12# xzxnovice

我这边在网页上是保存了登录状态的,在另一台win7系统下就能正常发帖。
xp系统下就总提示验证码错误,无奈啊。。。。

xzxnovice 发表于 2013-11-1 12:18:45

回复 13# kxing


我还没试过ie网页跟au3共享cookie成功!!

kxing 发表于 2013-11-1 13:02:08

似的,用objcreate("microsoft.xmlhttp")就能共享cookies。
但是用ObjCreate("winhttp.winhttprequest.5.1") 却不行,总提示没登陆。。。
有办法实现和ie那样,保存登录状态吗?
页: [1]
查看完整版本: [已解决]求天涯论坛验证码真实地址