gpt4 book ai didi

php - 正在工作的 cron 作业突然停止,无法读取外部 url

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:44 25 4
gpt4 key购买 nike

更新#2:我已经与我在 NOAA 的联系人确认,他们在整个 NOAA 中都存在严重的互连问题。例如,他们只从 2 个位置获取降水数据。我确定这是相关的。我让 NOAA 知道了这个话题以及你们为确定这是一个连接问题所做的工作。


更新:现在 wget 命令可以在我的本地服务器上运行,但不能在 1and1.com 服务器上运行。我想这可以解释为什么它可以在我的浏览器中运行。一定是东区的连接问题,因为你们中的一些人也遇到了同样的问题。希望这会自行解决,因为看起来我对此无能为力。


编辑:很明显我遇到的获取问题

  1. NOAA 地址的独特之处在于我的代码和其他站点没有问题
  2. 所有抓取在普通浏览器中都能正常工作
  3. 我无法尝试使用代码获取文件。

我的问题是如何编写代码来获取文件和浏览器?


我已经使用这个命令获取外部网页近 2 年了

wget -O <my web site>/data.txt  http://www.ndbc.noaa.gov/data/latest_obs/latest_obs.txt

我已经在两个不同的服务器上尝试过,结果相同,所以我确定我没有被阻止。

今天早上突然停止工作。更糟糕的是,它会让进程在服务器上运行,直到有足够的进程关闭我的帐户并且我的所有网站都出错,直到我们执行 kill。一次一个到49休眠过程。

我没有得到 1and1 的帮助技术支持。他们说这是我的 cron 脚本,就是上面的一行。

所以我决定使用 php 重写 get 文件。我试过 file_get_contents .我试过curl , fgets以及。但是这些都不起作用,所以我尝试了 lynx .

没有任何东西加载这个特定的 URL,但我尝试的一切在其他 url 上都可以正常工作。

但如果我只是复制 http://www.ndbc.noaa.gov/data/latest_obs/latest_obs.txt进入浏览器,没问题 - 文件会立即显示。

显然可以读取这个文件,因为浏览器正在这样做。我试过Chrome , IE , 和 Firefox加载此页面时没有人遇到问题,但我在代码中尝试过的任何东西都不起作用。

我想做的是读取这个文件,然后写入本地服务器缓冲。然后我的代码可以针对各种数据请求解析它。

阅读此外部网页的可靠方法是什么?


有人建议我添加一个用户代理,所以我将代码更改为以下

    function read_url($url){
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
$output = curl_exec($ch);
if(curl_errno($ch)){
echo "<!-- curl_error($ch) -->";
}
curl_close($ch);
return $output;
}

同样,它适用于其他外部网站,但不适用于本网站。


我尝试运行 wget手动:这是我得到的

(uiserver):u49953355:~ > wget -O <my site>/ships_data.txt http://www.ndbc.noaa.gov/data/realtime2/ship_obs.txt
--2013-11-17 15:55:21-- http://www.ndbc.noaa.gov/data/realtime2/ship_obs.txt
Resolving www.ndbc.noaa.gov... 140.90.238.27
Connecting to www.ndbc.noaa.gov|140.90.238.27|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 690872 (675K) [text/plain]
Saving to: `<my site>/ships_data.txt'

0% [ ] 1,066 --.-K/s eta 7h 14m

它只是停留在0%


注意 <my-site>是存储我的数据的网址。我不想公布我的错误区域的地址,但它就像 mydomain/buffer/


我只是在另一台服务器(不是 1and1)上尝试了同样的事情

dad@myth_desktop:~$ wget -O ships_data.txt http://www.ndbc.noaa.gov/data/realtime2/ship_obs.txt
--13:14:32-- http://www.ndbc.noaa.gov/data/realtime2/ship_obs.txt
=> `ships_data.txt'
Resolving www.ndbc.noaa.gov... 140.90.238.27
Connecting to www.ndbc.noaa.gov|140.90.238.27|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 690,872 (675K) [text/plain]

3% [====> ] 27,046 --.--K/s ETA 34:18

卡在3%这次。

最佳答案

您的两个 wget 命令对我都有效。

NOAA 似乎也没有阻止您的请求,因为您获得了 200 响应代码和 HTTP header (内容长度、类型等)和部分数据(1066 字节位于数据)。

这可能是您的连接(一般或专门连接到 NOAA)很慢或通过某些缓冲代理。在代理获取全部或大部分数据之前,wget 看起来连接正在失效。检索此文件是否有效:http://www.ndbc.noaa.gov/robots.txt

wget 的选项 --debug 也可能有助于找出问题。

无论如何,关于挂起 wget 进程,您可以使用 --timeout=60 选项来限制失败前的等待时间(http://www.gnu.org/software/wget/manual/wget.html)。

wget -O ships_data.txt http://www.ndbc.noaa.gov/data/realtime2/ship_obs.txt --timeout=10 

如果你想设置一个用户代理(就像你在 PHP 脚本中所做的那样),你可以使用“--user-agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0 .3705; .NET CLR 1.1.4322)”选项。

wget -O ships_data.txt http://www.ndbc.noaa.gov/data/realtime2/ship_obs.txt "--user-agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"

关于 curl 与 wget,您可以将 wget 命令替换为 curl 命令(而不是在 PHP 中执行):

curl -o ships_data.txt http://www.ndbc.noaa.gov/data/realtime2/ship_obs.txt --user-agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"

安德烈

关于php - 正在工作的 cron 作业突然停止,无法读取外部 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035829/

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