IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 实现代理IP的自动获取 -> 正文阅读

[网络协议]实现代理IP的自动获取

前言:
? ?
🤡 作者简介:我是Morning,计算机的打工人,想要翻身做主人 🙈 🙈 🙈
?? ?🏠 个人主页:Morning的主页
?? ?📕系列专栏::Morning的Python专栏
?? ?
📞 如果小编的内容有欠缺或者有改进,请指正拙著。期待与大家的交流
?? ?🔥如果感觉博主的文章还不错的话,👍点赞👍 + 👀关注👀 + 🤏收藏🤏

?

在这里插入图片描述

?

目录

一.代理IP

1.为什么要使用代理:

2.请求过程:

无代理

有代理

3.代理分类:

3.1透明代理:

3.2匿名代理:

3.3高匿代理:

4.IP的使用方法

4.1 IP的语法

4.2 IP的获取

4.3 其他情况的出现

5.超时参数

6.通过代码实现IP的自动获取

二.SSL报错


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????????????????????????????????????????????????正文

一.代理IP

1.为什么要使用代理:

1.让网站服务器认为不是同一个客户端在请求

2.防止我们的真实地址被泄露,防止被服务器认出同一个的用户身份,导致被反爬的几率大大提高

2.请求过程:

无代理

数据(请求响应)

用户发起请求,直接到达服务器

服务器也是直接将响应返回到用户

?

有代理

用户发起请求??代理服务器(转发)??网站服务器

网站服务器??代理服务器??(转发) ??用户

使用代理之后,请求或响应可能发生变化

当代对于请求的改变,情况不多

3.代理分类:

3.1透明代理:

透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以查到你是谁

3.2匿名代理:

使用匿名代理,别人只能知道你使用了代理,无法知道你是谁

3.3高匿代理:

高匿代理让别人根本无法发现你是在使用代理,所以是最好的选择

平台上获取的代理IP一般都有有效期,短则几分钟,长则几个月甚至一年,爬虫会经常性的修改代理IP,所以一般选择几分钟的代理IP即可。

4.IP的使用方法

4.1 IP的语法

?

proxies={
 ? ? "https":"http://IP地址:端口号",
 ? ? "https":"http://IP地址:端口号",
 ? ?  } ? #在有些情况中http会自动跳转为https,所以写成这种形式可以避免这种自动跳转造成的报错

如果url的协议头是http,那么proxies字典中的键就要写为http。

但是不管是http键还是https键,值必须都为http

完整使用

headers={"User-Agent":""}
proxies={"https":"http://IP地址:端口号"}
response=requests.get(url,headers=headers,proxies=proxies)
print(response.content.decode())

4.2 IP的获取

我们可以在一些网站上找到代理IP,但是那些免费的可靠性很低,100个中都不一定能有一个是有效的。

所以还是推荐在一些收费网站上找代理IP,天启, API获取-芝麻HTTP代理 (zmhttp.com) 都是可以的。而且收费也不高。我使用的是芝麻IP用来举例。

在注册账号之后获取IP链接?

打开链接后就可以得到IP?

使用此代码运行后便可以成功获取到该页面的文本内容。

import requests
import re
headers={"User-Agent":"User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42"}
url="https://www.zmhttp.com/getapi/"
# proxies={"https://http"+"IP"}
proxies={"https":"http://113.235.65.147:4251"}
response=requests.get(url,headers=headers,proxies=proxies)
print(response.content.decode())

4.3 其他情况的出现

在获取到链接之后直接转到该链接,可能会出现以下情况

4.3.1

?

需要复制IP然后在获取IP的网站个人中心??白名单??添加,将复制的IP添加到白名单,再次转到生成的链接便可以获取到完整的代理IP了

各个网站的操作都是大同小异

?

4.3.2 代理不可用

如果出现错误提示:

?

这个就代表着是IP地址不可用,在我们复制的链接页面进行刷新,IP地址也会刷新,然后在进行尝试。

5.超时参数

?

6.通过代码实现IP的自动获取

有一个新的问题,那就是一直请求,一直换新的IP地址就很烦。

我们学计算机可不是做无味的重复动作的,是用来偷懒的

下面用代码来一步一步实现简化IP代理的替换:

import requests
import re
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42'}
url='https://www.zmhttp.com/getapi/'
proxies={
 ? ?"https":"http://IP地址:端口号"
}
#通过循环来一直获取IP直到IP可用
while 1:
 ? try:
 ? ? ?response = requests.get(url, headers=headers, proxies=proxies, timeout=3) #此处的url为我们要请求的url
 ? ? ?print(response.content.decode())
 ? #如果请求失败就去请求新的IP
 ? except:
 ? ? ?response=requests.get(url,headers=headers) ?#此处的url为我们在收费网站获取到的url
 ? ? ?print(response.content.decode()) #获取新的IP
 ? ? ?str_ip = response.content.decode()
 ? ? ?#白名单添加逻辑
 ? ? ?if '白名单' in str_ip: ? #判断是否需要新的白名单
 ? ? ? ? ?write_ip=re.findall('\{"code":1010,"msg":"当前IP\((.*?)\)不在白名单内,请先设置IP白名单或联系客户经理"\}',str_ip)[0] 
                   ?#通过正则提取出需要的IP,提取出的为一个集合,所以只需要第一个元素
 ? ? ? ? ?print(write_ip)
 ? ? ? ? ?requests.get(url=f'https://wapi.http.linkudp.com/index/index/save_white?  neek=2208310&appkey=386af49701f1b0b7a57e4a5b084f5086&white={write_ip})',headers=headers) ?#此处的url为我们在收费网站找到的白名      ????????????????????????????????????????????????????????????????????????????????????????    单接口,并且将url中的ip改为write_ip
 ? ? ?proxies["https"]="http://"+str_ip.strip() ?#消除str_ip前后的空格
 ? ? ?print(str_ip) ? #看一下我们获取到的IP可以让我们知道有时候的代理不可使用是因为需要添加新的白名单
 ? ? ?continue
 ? else:
 ? ? ?print("该代理可以使用")
 ? ? ?break

此例中正则的实现:

{"code":1010,"msg":"当前IP(175.9.141.204)不在白名单内,请先设置IP白名单或联系客户经理"}
先将{}与()取消转义,在其前面添加\
然后再将175.9.141.204改为(.*?)

有人可能有疑问,为什么我们获取到的IP就是纯数字呀,为什么还需要使用正则呢?

注意!!当出现白名单提示时,无论循环多少次都只会是无效IP,需要使用正则先将我们需要的IP给提取出来。

那我们为什么又要使用strip方法呢?

我们可以直接打印代理IP的字节码print(response.content)?

我们就会发现后面还有\r\n。注意!!那些空格,回车我们都是用肉眼看不到的,这些空格也会被代码直接认为是IP。所以导致IP不可用。

如果感觉太麻烦也可以使用笨方法来一个一个手动添加

except:
 ? ?response = requests.get(url, headers=headers) ?# 此处的url为我们在收费网站获取到的url
 ? ?print(response.content.decode()) ?# 获取新的IP
 ? ?proxies["https"]="http://"+input("代理IP不可用,请输入新的代理IP")

二.SSL报错

这是在浏览某些网站时会出现的情况

?

原因:ssl的证书不安全导致

代码报错:

?

?解决方法:

response=requests.get(url.verify=False)

verify的默认值为True

出现SSLError时:首先检查url到底是否正确,如果是标准模式的话,那么就添加verify参数来忽略掉证书的验证

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:53:47  更:2022-10-22 21:54:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:44:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码