Python(八)- url 代理设置

之前有同事问到关于 Python 中URL走代理的问题,这里做个简单的记录。


一、部分思路

主要方法有:方法封装、类继承、装饰器、全局代理等。

二、具体实现

这里简述一下装饰器和全局代理的实现

2.1.装饰器

2.1.1.简介

在不修改被装饰对象的源代码以及调用方式的前提下为被装饰对象添加新功能

  • 原则:
  • 1.不修改被装饰对象的源代码
  • 2.不修改被装饰对象的调用方式
  • 目标:
  • 为被装饰对象添加新功能
2.1.2.实现

此处以 requests 为例

import os
import requests

PROXY_DCT = dict()
PROXY_DCT['http'] = 'http://username:password@host:port'
PROXY_DCT['https'] = 'https://username:password@host:port'

def add_proxy(fn):
    # 增加requests代理
    proxies = PROXY_DCT
    def inner(*args, **kwargs):
        from requests import Session
        from functools import partial
        s = Session()
        s.proxies = proxies
        return partial(fn, *args, **kwargs)(s)
    return inner

@add_proxy
def test(param, s):
    url = 'http://www.baidu.com'
    r = s.get(url)
    print(r.text)
    print(param)


if __name__ == '__main__':
    test('hello')

2.2.全局代理

(1)设置Python环境变量
import os
import requests

os.environ['http'] = 'http://user:pwd@host:port'
os.environ['https'] = 'https://user:pwd@host:port'


def test():
    url = 'http://www.163.com/'
    res = requests.get(url)
    print(res.text)


if __name__ == '__main__':
    test()
(2)urllib注册
import urllib.request


handler = urllib.request.ProxyHandler({'http': 'http://user:pwd@host:port'})
opener = urllib.request.build_opener(handler)

# 方式一:Opener 已经设置好代理了,调用它的 open() 方法即可使用此代理访问链接
response = opener.open('http://www.163.com/')

# 方式二:安装opener设置全局代理
urllib.request.install_opener(opener)
(3)socks、socket注册
import urllib.request
import socks, socket


socks.set_default_proxy(socks.PROXY_TYPE_SOCKS5, host, port)
socket.socket=socks.socksocket

def test():
    url = "https://blog.csdn.net/"  
    page = urllib.request.urlopen(url)  
    data = page.read()    #读取全部
    dataline = page.readline()    #读取一行内容
    print(data)


if __name__ == '__main__':
    test()

原文可见:我的博客 - URL代理配置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值