系统常驻梯子,程序中设置代理 ip 后无法成功爬取墙外资源,不设置却可以爬取成功,这是为什么?

2022-03-18 23:01:44 +08:00
 qtoq126

根据教程在代码中设置代理(我的梯子 http 端口是 8001)

proxies = {'https': 'https://127.0.0.1:8001', 'http': 'http://127.0.0.1:8001'}

然后通过 requests 包进行网络请求

print(requests.get(url=url, headers=headers, proxies=proxies).text) // 报错

结果报错

Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)'))

但是取消设置代理后通过下面的方式又可以正常请求到资源

print(requests.get(url=url, headers=headers).text) // 能获取到 html 资源

这是什么原因呢? 如果我用 scrapy 框架的话,那应该是在中间件中配置代理还是不配置呢

639 次点击
所在节点    程序员
6 条回复
qtoq126
2022-03-18 23:16:17 +08:00
还发现一个问题就是如果程序中代理用 socks5 协议是可以返回数据的
```
proxies = {'socks5': 'https://127.0.0.1:8001', 'socks5': 'http://127.0.0.1:8001'}
```
但是用 http 的不行
ysc3839
2022-03-18 23:32:48 +08:00
你的代理服务器不支持用 https 协议连接吧?你写 https://代表用 https 协议连接代理服务器,这里应该写 http://
这个错误信息大概是发送了 https 数据给了 http 服务器,然后被断开连接了。
qtoq126
2022-03-19 10:08:36 +08:00
@ysc3839 我的代理服务器里默认有三个端口,一个 Socks5 端口( 1081 ),一个 HTTP 端口( 8001 ),一个 PAC 服务器端口( 7777 )
linuxyz
2022-03-19 19:51:04 +08:00
`proxies = {'https': 'http://127.0.0.1:8001', 'http': 'http://127.0.0.1:8001'}`

你把代理都改成 `http://127.0.0.1:8001`

或者
`proxy: 'socks5://127.0.0.1:1081'`

or

`proxy: 'http://127.0.0.1:8001'`
qtoq126
2022-03-21 08:57:33 +08:00
@linuxyz 这样的话如果我爬 https 的网站也是可以走代理的么
linuxyz
2022-03-26 12:14:41 +08:00
@qtoq126 看你的代码感觉是在配 Node.js 如果配了 proxy 之后,无论应该访问啥资源 http or https 都会尝试使用 proxy. 建议用 socks5 代理先。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841380

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX