标题:服务器大图片不能获取
取消只看楼主
guchew
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-5-14
结帖率:28.57%
已结贴  问题点数:10 回复次数:4 
服务器大图片不能获取
我向一个服务器取图片,读取完成后再取下一张,服务器返回的是图片的BASE64编码。当图片尺寸较小时,可以正常接收到。但尺寸较大时,Responsetext不能获得正确数据,而抓包工具显示服务器返回的图片数据是完整的。没有设置Timeout。部分代码如下:
           With http
                .open("GET", URL, True)
                .SetRequestHeader("Cookie", sessionid)
                .setRequestHeader("Accept", "text/json")
                .setRequestHeader("Accept-Encoding", "deflate")
                .setRequestHeader("Connection", "Keep-Alive")
                .setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
                .send()
                .waitforresponse()
                If .Status = 200 Then
                    quma = .Responsetext
                If InStr(quma, "ImageByte") > 0 Then
                    '读取图片
                else
                     '执行下一次请求
                end if
                ......
怎样能让较大的图片也接收到?
搜索更多相关主题的帖子: 服务器 Cookie 图片 
2016-05-21 22:18
guchew
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-5-14
得分:0 
谢谢回复,不过我的情况与这不一样,我这是验证码图片,没有URL,是发出请求后服务器传输回来图片的BASE64编码和图片ID等信息,不是每次请求都能成功。有时抓包软件中看到图片的完整信息发过来了,但StreamReader没读取出来(一般是包比较大的时候),读出结果只是一两个乱码符号。不知是超时造成的(没有设置timeout),还是工具问题,别人写的程序没有这个问题。这是正常获取的数据格式:
{"Id":"6755f160-42cf-439f-a8ab-144c0d72034a","ImageByte":"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","ServerId":"8","TypeId":"2040","Score":"10","Multiple":"1","Time":"10000","Tip":"%e8%af%b7%e8%be%93%e5%85%a5%e5%af%b9%e5%ba%94%e7%9a%84%3cspan+style%3d%22color%3ared%22%3e4%3c%2fspan%3e%e4%bd%8d%3cspan+style%3d%22color%3ared%22%3e%e8%8b%b1%e6%96%87%e5%ad%97%e6%af%8d%3c%2fspan%3e","TopTip":"%e8%af%b7%e8%be%93%e5%85%a5%e5%af%b9%e5%ba%94%e7%9a%84%3cspan+style%3d%22color%3ared%22%3e4%3c%2fspan%3e%e4%bd%8d%3cspan+style%3d%22color%3ared%22%3e%e8%8b%b1%e6%96%87%e5%ad%97%e6%af%8d%3c%2fspan%3e","BottomTip":"%e7%ba%af%e8%8b%b1%e6%96%87%ef%bc%9a%e6%af%8f%e7%a0%81%3cspan+style%3d%22color%3ared%22%3e%40Score%3c%2fspan%3e%e5%88%86%ef%bc%8c%3cspan+style%3d%22color%3ared%22%3e%e8%b6%85%e6%97%b6%e5%8f%8c%e5%80%8d%e6%89%a3%e5%88%86%3c%2fspan%3e%e3%80%82","ResultRegexp":"XlthLXpBLVpdJA%3d%3d","Script":"","Script2":"","Length":"4"}
  "ImageByte":"后面有图片BASE64编码。这是我的程序代码:
  Dim encoding As ASCIIEncoding = New ASCIIEncoding()
  Dim myRequest As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
        myRequest.Method = "GET"
        myRequest.ContentType = "application/x-www-form-urlencoded"
        myRequest.CookieContainer = cookie
        myRequest.Accept = "*/*"
        myRequest.KeepAlive = True
        Dim myResponse As HttpWebResponse = CType(myRequest.GetResponse(),     HttpWebResponse)
        Dim newStream As Stream = myResponse.GetResponseStream()
        Dim reader As StreamReader = New StreamReader(newStream,   System.Text.Encoding.GetEncoding("utf-8"))
        dim str as string = reader.ReadToEnd()
        TextBox1.Text = str
        reader.Close()
        newStream.Close()
        If InStr(str, "ImageByte") > 0 Then
        '读取图片
        ......

[此贴子已经被作者于2016-5-24 12:10编辑过]

2016-05-24 12:05
guchew
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-5-14
得分:0 
问题解决了,换其他的读取方式。
2016-05-24 19:09
guchew
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-5-14
得分:0 
不想误导大家,其实也没真正解决,目前我只能判断出哪些图片不能接收到,通过代码进行异常处理。现在发现接收不了不是图片大小的问题,可能是格式问题。举个例子:能够读取出来的BASE64编码是这个样子:
"hUG/oPRT6uMAkwaNbS901MJZVofDaa/gvQGlzLg4qkY6Odi85qNYr4/vJWzNlYQvmzKAVgaqQAx2VgmACnii+yy1HJ/wRVClgYmqBRw6HG7zTJ3JekQRHDax9WYLM8gI2i9u57RQQeNKIkt0G9qFFV6QbYhji2KuMz2EAmcFHCUb9HGv919EaxXtVArcSG+R7VbMGoN7MDwPHXTEBGm7lk4WGH9yUNjS+RCnvlgZqGSQmlRorF6cybKiS/Moq3amkCBKiMnRFiscky08k3vUXmxQ+1qLB4....."
而不能接收到的是这个样子:
"Qk1eIwAAAAAAADYAAAAoAAAAZAAAAB4AAAABABgAAAAAACgjAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////+Pr67/f29P//9v///f//8+7v//v8//v+y///2fTx//f///n///v///3+2/rz//////////......"
或者:
"Qk1eUQAAAAAAADYAAAAoAAAAggAAADUAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb
29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb2....."
抓包工具能够抓到数据,那就是有办法取得这些数据的。如果大家知道方法请告知,谢谢。


[此贴子已经被作者于2016-5-25 15:28编辑过]

2016-05-25 13:39
guchew
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-5-14
得分:0 
谜底解开了,是抓包软件误导了我。返回数据是GZIP压缩了的。抓包软件没有显示这个信息,直接显示解压后的数据和数据长度。
2016-06-11 20:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-465106-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.488656 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved