Bash Curl获取HTTP响应0而不是200

Bash Curl获取HTTP响应0而不是200,bash,curl,Bash,Curl,嗨,我有以下简单的脚本从文本中读取一些URL,并将其发布到另一个文本文件中 #!/bin/bash while read url do urlstatus=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "$url") echo "$url" echo "$url $urlstatus" >>

嗨,我有以下简单的脚本从文本中读取一些URL,并将其发布到另一个文本文件中

#!/bin/bash

while read url

do

    urlstatus=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "$url")
    
        echo "$url"
        echo "$url  $urlstatus" >> urlstatus.txt
        
        done < $1
#/bin/bash
读取url时
做
urlstatus=$(curl-o/dev/null--silent--head--write out“{http_code}'”$url)
回显“$url”
echo“$url$urlstatus”>>urlstatus.txt
已完成<$1
例如,我尝试以下链接:

但是我得到0作为响应。当我通过谷歌查询时,我得到了200英镑。我在剧本中遗漏了什么吗


零不是有效的HTTP响应代码

如果
curl
无法建立到服务器的HTTP连接,或者服务器(不知何故)无法传递格式良好的HTTP响应消息,则该变量中将不会返回“HTTP代码”。在这种情况下,您可能会看到零

也可能是您正在使用的
$url
的值无效。例如,如果URL包含在
字符中,则它
curl
将无法理解它。在那种情况下,我也希望是零

问题是,
--silent
告诉
curl
扔掉所有错误消息,因此它无法告诉您问题是什么

我建议您通过运行以下命令查看得到的结果:

  curl -o /dev/null --head "$url"

使用与您当前使用的url字符串相同的url字符串。

我刚刚发现,如果您使用在windows操作系统中创建的txt文件,它在ubuntu中无法正常工作。这就是我得到0的原因。你需要在Ubuntu中创建txt文件,并将链接复制到那里。无论如何,谢谢你的回答。

从这个链接我得到了一个301,如果我使用上面提供的确切URL(使用
<…>
包装器),我得到
000
。对不起,我帮不了你了。祝你好运。从curl手册页:-w,--写下注意事项:%-符号是win32环境中的一个特殊符号,在使用此选项时,所有出现的%必须加倍。还添加了chrome响应,奇怪的是,使用google I Receive 200时,没有任何问题,在curl中购买相同的链接不起作用。只是几件事。首先,我在Linux机器上运行了您提供的示例,得到了与@oguz ismail之前提到的相同的响应,HTTP状态301响应(重定向)。如果您希望遵循重定向,从而获得200响应代码,那么应该使用curl和'-L'选项。第二,为了更好地复制您的问题,您的执行环境是什么?但在这种情况下,我希望chrome network tab会做出相同的响应,对吗?我相信,当它请求响应时,它会以某种方式超时。因为如果我在没有静默模式的情况下运行,我会得到0。我不一定期望使用
chrome
curl
得到相同的结果。网络代理设置可能不同。代理字符串可能不同。您甚至可能没有从同一台机器发送HTTP请求。听起来像是一个错误。DOS/Windows在每行的末尾使用一个额外的回车符,unix工具将其视为行内容的一部分,结果是混乱的。
dos2unix
unix2dos
命令在unix/Linux和Windows行分隔符之间转换。