刹那光华 发表于 2021-10-22 02:15

Python3 下载文件 报错

QQ浏览器直接打开链接显示:
无法安全地连接到此页面这可能是因为该站点使用过期的或不安全的 TLS 安全设置。如果这种情况持续发生,请与网站的所有者联系。

火狐浏览器没问题

云服务器的IE浏览器也能正常打开

PHP可以正常下载
file_put_contents("小说/".$_GET[ 'name' ].".txt", file_get_contents("https://xiazai.xqishu.com/txt/".$_GET[ 'name' ].".txt"));

唯独Python下不了,报错信息:
'Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)

import requests
import time
import logging

def output(title='',info=''):
    try:
      timeInfo = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
      outputInfo = '[%s]\n%s => %s' % (timeInfo,title,info)
      logging.debug(outputInfo)
      print(outputInfo)
      return outputInfo
    except requests.exceptions.RequestException as e:
      logging.debug(title,'输出错误',e)

   
def DownLoad(name):
    try:#https://xiazai.xqishu.com/txt/%E5%BC%82%E4%B8%96%E4%B9%8B%E4%BB%99%E4%B8%B4%E8%AF%B8%E7%95%8C.txt
      url = 'https://xiazai.xqishu.com/txt/%s.txt'%name
      path = '小说/%s.txt'%name
      Headers={
            'Host': 'www.xqishu.me',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
            'Accept-Encoding': 'gzip, deflate, br',
            'Alt-Used': 'xiazai.xqishu.com',
            'Connection': 'keep-alive',
            'Upgrade-Insecure-Requests': '1',
            'Sec-Fetch-Dest': 'document',
            'Sec-Fetch-Mode': 'navigate',
            'Sec-Fetch-Site': 'cross-site',
            'Sec-Fetch-User': '?1',
      }
      output('GET请求','Url:'+url+'Path:'+path)
      r = requests.get(url, headers=Headers,stream=True)
      output('GET结果','StatusCode:'+str(r.status_code))
      
      if r.status_code == 200:
            with open(path, "wb") as code:
                code.write(r.content)
            return True
    except requests.exceptions.RequestException as e:
      output('Error',e)
    return False

if __name__ == '__main__':
    load = DownLoad('九极剑神')
    print(load)

laos 发表于 2021-10-22 03:10

去掉headers里的host

或者

改成跟url相对应的

url = 'https://xiazai.xqishu.com/txt/%s.txt'%n
      Headers={
            'Host': 'xiazai.xqishu.com'
}

刹那光华 发表于 2021-10-22 03:17

laos 发表于 2021-10-22 03:10
去掉headers里的host

或者


貌似没有效果,还是一样的错误

laos 发表于 2021-10-22 03:32

本帖最后由 laos 于 2021-10-22 03:39 编辑

刹那光华 发表于 2021-10-22 03:17
貌似没有效果,还是一样的错误
啊 抱歉, 我看了下

因为我copy下来发生的错误跟你的不同删改了headers里的host后就正常了

刹那光华 发表于 2021-10-22 04:29

laos 发表于 2021-10-22 03:32
刹那光华 发表于 2021-10-22 03:17
貌似没有效果,还是一样的错误
啊 抱歉, 我看了下


本地环境3.81 requests 2.25.1 443错误
云函数    3.6requests 2.21.0 正常运行
感觉可能是网络问题,但是我打包后发到云服务器上面也不行。。。

wkfy 发表于 2021-10-22 05:27

r = requests.get(url, headers=Headers,stream=True,verfiy=False)
试试。

gentlespider 发表于 2021-10-22 08:39

应该是请求头的问题,试试改下看看

知心 发表于 2021-10-22 09:25

本帖最后由 知心 于 2021-10-22 09:27 编辑


headers头里保留着结果信息足够了。
但是你保存文件的路径是有问题的,要么就写成绝对路径,要么就用os库的方法取一下当前运行环境的路径,做一个拼接,保证指定的文件夹是存在的。

运行环境:
python:3.7.4
requests:2.24.0

花不开但要富贵 发表于 2021-10-22 09:26

删除了Host就没问题了

magicianly 发表于 2021-10-22 09:31

你的头文件有问题,你'Connection'这个属性:长链接服务器,服务器是会断掉你的连接的,因为你用的是requests,而不是requests.session
页: [1] 2
查看完整版本: Python3 下载文件 报错