Python中求解诡异问题:本地运行正常,服务器上跑报错 urllib.error.HTTPError: HTTP Error 503

使用的 Python3 版本,基于 flask 写的 web 网站,python3 app.py 直接跑起来后,用 nginx 做代理访问。本机测试时可以爬取网页内容,放在服务器上就报: urllib.error.HTTPError: HTTP Error 503: Service Temporarily Unavailable。 测试过服务器和要爬的地址是通的,代理 ip 也是可用的。

直接上源码:

def search(name):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'}
    chaper_url = "https://cn.torrentkitty.tv/search/%s/" % parse.quote(name)
    cookie = cookiejar.CookieJar()
    handler = request.HTTPCookieProcessor(cookie)
    proxy_handler = request.ProxyHandler({'http': 'http://101.96.11.5:80'})
    opener = request.build_opener(handler, proxy_handler)
    myRequest = request.Request(url=chaper_url, headers=headers)
    myResponse = opener.open(myRequest)

Python中求解诡异问题:本地运行正常,服务器上跑报错 urllib.error.HTTPError: HTTP Error 503

11 回复

你需要一个 Docker…


这个503错误是服务器端的问题,不是你的代码问题。503表示服务暂时不可用,通常是目标服务器过载或维护。

常见原因和排查方法:

  1. 目标服务器问题:你访问的网站或API服务器挂了,检查目标网站是否能正常访问
  2. 请求频率过高:服务器限制了请求频率,添加延迟或使用代理
  3. User-Agent被限制:有些网站会屏蔽Python的默认User-Agent

试试这个改进的代码:

import urllib.request
import time
import random

def safe_request(url, max_retries=3):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
    
    for attempt in range(max_retries):
        try:
            req = urllib.request.Request(url, headers=headers)
            response = urllib.request.urlopen(req)
            return response.read()
        except urllib.error.HTTPError as e:
            if e.code == 503:
                print(f"第{attempt+1}次尝试失败: 503错误")
                if attempt < max_retries - 1:
                    # 指数退避等待
                    wait_time = (2 ** attempt) + random.uniform(0, 1)
                    time.sleep(wait_time)
                    continue
            raise e
        except Exception as e:
            raise e
    
    raise Exception(f"请求失败,已重试{max_retries}次")

# 使用示例
try:
    data = safe_request("http://example.com")
    print("请求成功")
except Exception as e:
    print(f"最终失败: {e}")

本地能跑服务器不行,可能是网络环境不同,检查服务器到目标地址的网络连接。

总结:503是服务器问题,加重试机制和伪装头试试。

能说清楚点吗,docker 和服务器有什么区别吗,对了我是放在国外的 vps 上跑有问题

我有点晕了 你究竟是把网站放到服务器上面还是把爬虫放到服务器上面?

网站放服务器上了,里面有段爬网页的代码

这个 503 是你自己的服务报的还是远程主机返回的

远程主机报的错误,爬页面的时候报错了,上面是爬页面的代码

又要沉了,真心想不到什么原因😭

本机->代理->爬取页 √
服务器->代理->爬取页 ×

检查过服务器到代理是否可行?代理是否如期成功?

不加代理本机也是可以,服务器不行。在服务器上 telnet 代理 ip 和端口是通的

服务器上不行,才加的代理测试了下,还是不行

回到顶部