gpt4 book ai didi

python - 无法使用python套接字编程下载文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:08 27 4
gpt4 key购买 nike

我想仅使用 python 套接字从此 url ( http://justlearn.16mb.com/a.jpg ) 下载文件,但我不知道该怎么做,因为我是 python 新手。

实际上我的主要目标是使用 wifi 连接下载文件,另一半使用以太网连接下载文件。

预先感谢您的帮助。

import os
import socket

tcpd = 'http://justlearn.16mb.com/a.jpg'
portd = 80
ipd = socket.gethostbyname('http://justlearn.16mb.com/a.jpg')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((tcpd,portd))



BUFFER_SIZE = 1024

with open('a.jpg', 'wb') as f:
print ('file opened')
while True:
#print('receiving data...')
data = s.recv(1024)
#print('data=%s', (data))
if not data:
f.close()
break
# write data to a file
f.write(data)

print('Successfully get the file')
s.close()
print('connection closed')

最佳答案

您可能想尝试这样的事情。由于代理,我无法对其进行测试,但该示例应该可以帮助您朝正确的方向前进。直接使用套接字会使这变得不必要的困难。

#! /usr/bin/env python3
import http.client


def main():
connection = http.client.HTTPConnection('justlearn.16mb.com')
connection.request('GET', '/a.jpg')
response = connection.getresponse()
if response.status != 200:
raise RuntimeError(response.reason)
with open('a.jpg', 'wb') as file:
while not response.closed:
buffer = response.read(1 << 12)
if not buffer:
break
file.write(buffer)
connection.close()


if __name__ == '__main__':
main()

这是另一个更短的示例,并使用 urllib.request 包中的 urlopen 函数。由于 HTTP 代码是在后台处理的,所以代码更简单。

#! /usr/bin/env python3
from urllib.request import urlopen


def main():
with urlopen('http://justlearn.16mb.com/a.jpg') as source, \
open('a.jpg', 'wb') as destination:
while True:
buffer = source.read(1 << 12)
if not buffer:
break
destination.write(buffer)


if __name__ == '__main__':
main()

关于python - 无法使用python套接字编程下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39397878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com