python-socket下载图像

python-socket下载图像,python,image,sockets,download,binary,Python,Image,Sockets,Download,Binary,早上好,社区 经过几个小时的谷歌搜索,我开始了这个帖子。 我正在尝试使用python套接字模块从www下载一张图片。 我用“recv()”获取图片的源代码,并将其以二进制模式写入文件。 使用“answer.split(“image/jpeg”)”从标题拆分内容并不能解决问题 这是我的密码: import socket socket.setdefaulttimeout(30) HOST = 'ict.de' PORT = 80 def makestr(s):#crea

早上好,社区

经过几个小时的谷歌搜索,我开始了这个帖子。 我正在尝试使用python套接字模块从www下载一张图片。 我用“recv()”获取图片的源代码,并将其以二进制模式写入文件。 使用“answer.split(“image/jpeg”)”从标题拆分内容并不能解决问题

这是我的密码:

import socket

socket.setdefaulttimeout(30)

HOST = 'ict.de'   
PORT = 80         

def makestr(s):#create paket-string from list
    rs = ""
    for x in range(0,len(s)-1):
            rs+=s[x]+"\r\n"
    rs+="\r\n"
    return rs

def sendcap(sdata):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.send(sdata)

    recvd=""
    while True:
        data = s.recv(1024)
        if not data: print " Done "; break
        recvd += data
    data = recvd.split("image/jpeg")[1]
    s.close()

    return data

xy = []  
xy.append("GET /fileadmin/ict/images/Presse/Download-Button_1700x1000.jpg HTTP/1.1")
xy.append("Host: www.ict.de")
xy.append("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101      Firefox/19.0")
xy.append("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
xy.append("Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3")
xy.append("Accept-Encoding: gzip, deflate")
xy.append("DNT: 1")
xy.append("Connection: keep-alive")
data = sendcap(makestr(xy))
f = open("logo.jpg","wb")
f.write(data)
f.close()
在纯文本中的数据在纯文本中的数据是这样的(没有标题,在图像/jpeg的图像上分割,没有标题,在图像上分割,没有标题,在图像/jpeg的图像中分割)的“255”的,像这样的东西(没有标题,没有标题,在纯文本中的数据,在纯文本中的数据是这样的(没有标题,没有标题,在图像上分割,在图像/jpeg的分割)的“2555”切切门门门门门市市市市(5)北京北京北京(1r2)的)北京(1r23812,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我,我,你们你们是是,你们的,你们,你们,你们,你们,你们,你们,你们,你们是是,你们的,你们,你们,你们,你们,你们,你们,你们是,你们是,你们,你们,你们们,你们们,你们们,你们12月月12日日日日日日日日日日日日日日日日日日日方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方ÿÿÿÿÿÿÿÿÿÿÿĀÿÿÿÿÿÿ3!1AQa“第二季度”,B#$RÁb344rÿC%ðcs5、DðUòeò

看起来像二进制数据

当我试图用windows picture show打开文件时,它得到一个错误,即文件已损坏


希望有人能帮助我。

'image/jpeg'
处拆分不起作用,因为在那之后有两个
'\r\n'
终止HTTP头

报头不能保证以任何特定的顺序出现,因此处理这样的响应可能会突然停止工作

如果您需要查找标题末尾标记:

data = recvd.split("\r\n\r\n", 1)[1]
当然,这只有在不发送通知的情况下才有效


有一些库专门用来做这类事情(,),为什么不使用它们呢?

我使用urllib2,但我想了解它在较低级别的工作原理。我认为\r\n\r\n标志着paket的结束。要尝试一下。-编辑:它有效;)-将“data=recvd.split(“image/jpeg”)”[1]更改为“data=recvd.split”(\r\n\r\n“[1]”