Python中代理IP使用报错问题如何解决
File “/usr/lib/python3.4/site-packages/urllib3/connectionpool.py”, line 638, in urlopen
339 _stacktrace=sys.exc_info()[2])
340 File “/usr/lib/python3.4/site-packages/urllib3/util/retry.py”, line 367, in increment
341 raise six.reraise(type(error), error, _stacktrace)
342 File “/usr/lib/python3.4/site-packages/urllib3/packages/six.py”, line 685, in reraise
343 raise value.with_traceback(tb)
344 File “/usr/lib/python3.4/site-packages/urllib3/connectionpool.py”, line 600, in urlopen
345 chunked=chunked)
346 File “/usr/lib/python3.4/site-packages/urllib3/connectionpool.py”, line 384, in _make_request
347 six.raise_from(e, None)
348 File “<string>”, line 2, in raise_from
349 File “/usr/lib/python3.4/site-packages/urllib3/connectionpool.py”, line 380, in _make_request
350 httplib_response = conn.getresponse()
351 File “/usr/lib64/python3.4/http/client.py”, line 1227, in getresponse
352 response.begin()
353 File “/usr/lib64/python3.4/http/client.py”, line 386, in begin
354 version, status, reason = self._read_status()
355 File “/usr/lib64/python3.4/http/client.py”, line 356, in _read_status
356 raise BadStatusLine(line)
357 urllib3.exceptions.ProtocolError: (‘Connection aborted.’, BadStatusLine("’’",))
358
359 During handling of the above exception, another exception occurred:
360
361 Traceback (most recent call last):
362 File “/home/shenjianlin/my_project/run.py”, line 56, in <module>
363 run().get_spider()
364 File “/home/shenjianlin/my_project/run.py”, line 18, in get_spider
365 qimingpian().get_id_and_url()
366 File “/home/shenjianlin/my_project/qimingpian_person/qimingpian_person.py”, line 134, in get_id_and_url
367 self.get_agency_content(row_column_list[i -1],row_column_list[i])
368 File “/home/shenjianlin/my_project/qimingpian_person/qimingpian_person.py”, line 304, in get_agency_content
369 self.s.get(news_link, auth=self.auth, proxies=self.proxies).content.decode(“utf-8”)).xpath(
370 File “/usr/lib/python3.4/site-packages/requests/sessions.py”, line 525, in get
371 return self.request(‘GET’, url, **kwargs)
372 File “/usr/lib/python3.4/site-packages/requests/sessions.py”, line 512, in request
373 resp = self.send(prep, **send_kwargs)
374 File “/usr/lib/python3.4/site-packages/requests/sessions.py”, line 622, in send
375 r = adapter.send(request, **kwargs)
376 File “/usr/lib/python3.4/site-packages/requests/adapters.py”, line 495, in send
377 raise ConnectionError(err, request=request)
378 requests.exceptions.ConnectionError: (‘Connection aborted.’, BadStatusLine("’’",))
我在网上看到说 https 请求写成 http 请人看一下这是啥问题,谢谢!
Python中代理IP使用报错问题如何解决
代理IP报错通常是因为请求库配置不当或代理本身失效。核心解决思路是正确配置代理参数并添加异常处理。
1. 基础代理配置
import requests
proxies = {
'http': 'http://user:pass@ip:port',
'https': 'https://user:pass@ip:port'
}
# 测试代理连通性
try:
resp = requests.get('http://httpbin.org/ip',
proxies=proxies,
timeout=10)
print(f'当前IP: {resp.json()["origin"]}')
except requests.exceptions.ProxyError as e:
print(f'代理连接失败: {e}')
except requests.exceptions.ConnectTimeout:
print('连接超时,请检查代理服务器状态')
2. 会话保持和重试机制
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
retry_strategy = Retry(
total=3,
status_forcelist=[500, 502, 503, 504]
)
session.mount('http://', HTTPAdapter(max_retries=retry_strategy))
session.mount('https://', HTTPAdapter(max_retries=retry_strategy))
# 使用会话
response = session.get('https://api.ipify.org',
proxies=proxies,
timeout=(3.05, 27))
3. 常见错误处理
import socks
import socket
# 解决SOCKS代理问题
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 1080)
socket.socket = socks.socksocket
# 或者使用requests的socks支持
proxies = {'http': 'socks5://user:pass@ip:port',
'https': 'socks5://user:pass@ip:port'}
4. 代理池实现示例
import random
from typing import List
class ProxyPool:
def __init__(self, proxies: List[str]):
self.proxies = proxies
def get_proxy(self) -> dict:
proxy = random.choice(self.proxies)
return {
'http': f'http://{proxy}',
'https': f'http://{proxy}' # 注意有些代理http/https相同
}
def mark_bad(self, proxy: str):
if proxy in self.proxies:
self.proxies.remove(proxy)
# 使用示例
pool = ProxyPool(['ip1:port', 'ip2:port', 'ip3:port'])
current_proxy = pool.get_proxy()
关键检查点:
- 代理格式是否正确(协议://用户:密码@IP:端口)
- 代理是否需要认证
- 防火墙是否放行
- 代理协议匹配(HTTP代理不能用于HTTPS请求)
建议先用免费代理测试基础功能。
所以上一下代码吧……

