搭建代理的一个小坑之HTTP与HTTPS的使用


————————————————————————————————————————

代理的作用与原理

代理服务器在写爬虫的时候会经常用到,主要作用有隐藏真实IP和提高访问速度等。其原理是这样一回事:形象地说,它是网络信息的中转站。在我们正常请求一个网站时,是发送了请求给Web服务器,Web服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机。这样我们同样可以正常访问网页,但这个过程中Web服务器识别出的真实IP就不再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理。

本地搭建代理

from urllib.error import URLError
from urllib.request import ProxyHandler,build_opener

proxy_handler = ProxyHandler({
    'http':'http://127.0.0.1:63342',
    #'https':'https//127.0.0.1:63342'
})
opener = build_opener(proxy_handler)

try:
    response = opener.open('https://www.baidu.com')
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

这里使用了ProxyHandler,其参数是一个字典,键名是协议类型(比如HTTP或者HTTPS等),键值是代理链接,可以添加多个代理。
然后,利用这个Handler及build_opener()方法构造一个Opener,之后发送请求即可。

一个小坑

上述代码中https参数部分容易被新手忽略,因为这里是本地代理服务器,而你的本地服务器并没有取得SSl证书,也就并没有https协议(https是http的一个安全版本)。如果上面并没有注释的话(http和https两个参数同时存在)就会报错“Tunnel connection failed: 404 Not Found”,如下:
404
注释掉https参数就可以,如:

#'https':'https//127.0.0.1:63342'

端口未打开报错

“[WinError 10061] 由于目标计算机积极拒绝,无法连接。”如下:
端口报错
报错原因:9743端口在我们的电脑并没有开放(因每个人的电脑而异),以至于无法对外进行连接。
如何查询端口在个人电脑是否开放?

查看端口信息状态

补个知识
快捷键“win+R”打开cmd,键入

netstat -ano

然后可以得到以下图片的ip和端口信息:
在这里插入图片描述
LISTENING为电脑已经开放了的监听端口。
查看指定端口的占用情况:
以上面搭建的端口(63342)为例

netstat -aon|findstr "63342"

在这里插入图片描述
可以看到“63342”端口被进程号为18220的进程所占用,我们可以根据进程号查看多应的进程。

tasklist|findstr “18220”

在这里插入图片描述
可以看到是我刚刚进行连接的pycharm占用了改端口。
如果我们不想它占用就把改程序kill了以结束该进程:

taskkill /f /t /im pycharm64.exe

(我这里就不演示结束进程了,懒得再开了,哈哈哈!)

服务器代理

刚刚演示的是是用我的主机搭建本地服务器代理,现在我用的自己的服务器进行代理,在这我的服务器是已经取得了SSL证书了,即可以使用https参数。
在这里插入图片描述

一个程序员杂谈公众号,欢迎关注。
在这里插入图片描述

有不足之处望留言指正

——————END——————
Programmer:柘月十七

发布了29 篇原创文章 · 获赞 8 · 访问量 4646

猜你喜欢

转载自blog.csdn.net/weixin_43716338/article/details/104196906
今日推荐