Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 检查是否存在未下载的大文件_Python 3.x_Web Scraping_Http Headers_Python Requests - Fatal编程技术网

Python 3.x 检查是否存在未下载的大文件

Python 3.x 检查是否存在未下载的大文件,python-3.x,web-scraping,http-headers,python-requests,Python 3.x,Web Scraping,Http Headers,Python Requests,不确定这是否可行,但我想在不下载的情况下检查对大文件的HTTP请求的状态代码;我只想检查一下服务器上是否有 用Python的请求可以做到这一点吗?我已经知道如何检查状态代码,但我只能在文件下载后进行检查 我想我问的是,你能发出一个GET请求并在收到响应头后立即停止它吗?使用requests.head(),这只返回请求头,而不是所有内容,换句话说,它不会返回消息体,但你可以从消息头获取所有信息 HEAD方法与GET相同,只是服务器不能 在响应中返回消息正文。包含的元信息 在HTTP中,响应头请求的

不确定这是否可行,但我想在不下载的情况下检查对大文件的HTTP请求的状态代码;我只想检查一下服务器上是否有

用Python的
请求
可以做到这一点吗?我已经知道如何检查状态代码,但我只能在文件下载后进行检查

我想我问的是,你能发出一个GET请求并在收到响应头后立即停止它吗?

使用
requests.head()
,这只返回请求头,而不是所有内容,换句话说,它不会返回消息体,但你可以从消息头获取所有信息

HEAD方法与GET相同,只是服务器不能 在响应中返回消息正文。包含的元信息 在HTTP中,响应头请求的头应该相同 响应GET请求而发送的信息此方法可以 用于获取由 请求而不传输实体体本身。这种方法是可行的 通常用于测试超文本链接的有效性、可访问性、, 以及最近的修改。

例如:

import requests
url = 'http://lmsotfy.com/so.png'
r = requests.head(url)
r.headers
输出:


此代码不下载图片,但返回图片消息的标题,其中包含大小、类型和日期。如果图片不存在,就不会有这样的信息。

通常,对于这类事情,您使用HEAD方法而不是GET。如果您在web上查询某个随机服务器,那么请准备将其配置为返回不一致的结果(这对于需要注册的服务器是典型的)。在这种情况下,您可能希望使用GET请求来下载少量字节。

使用
HEAD
方法。 例如
urllib

import urllib.request

response = urllib.request.urlopen(url)
if response.getcode() == 200:
    print(response.headers['content-length'])
对于
请求

import requests

response = requests.head(url)
if response.status_code == 200:
    print(response.headers['content-length'])

也许可以帮助您。@dot.Py,它使用对
ssh
的子进程调用来检查ssh服务器上是否存在文件。。。不是同样的情况,但是谢谢。
import requests

response = requests.head(url)
if response.status_code == 200:
    print(response.headers['content-length'])