-
2021-01-04 10:45:46
目录
本文介绍几种在Python里使用代理的方式,假定代理运行在本机,HTTP代理端口为1231, SOCKS5代理端口为8080。
HTTP全局代理:环境变量方式
在命令行里配置如下环境变量,然后执行Python脚本,Python在进行网络请求时就会使用配置的代理。
export http_proxy="http://127.0.0.1:1231" export https_proxy="http://127.0.0.1:1231"
HTTP全局代理:代码实现方式
也可以在Python代码里添加如下内容,效果与上面的方式相同:
import os os.environ["http_proxy"] = "http://127.0.0.1:1231" os.environ["https_proxy"] = "http://127.0.0.1:1231"
SOCKS全局代理
通过设置环境变量的方式通常只能使用HTTP代理。要使用全局SOCKS代理可以使用tsocks.
安装tsocks后,编辑
/etc/tsocks.conf
,以使用端口为8080的本地SOCKS5代理为例:server = 127.0.0.1 server_port = 8080 server_type = 5
配置完成后在原来的脚本执行命令前添加tsocks即可使用,例如:
tsocks python3 myscript.py
针对部分请求设置代理
前面的几种方式会为所有的HTTP请求设置代理,如果只想让部分请求使用代理,可以使用requests的proxies参数:
import requests proxies = {'http': "socks5://127.0.0.1:8080", 'https': "socks5://127.0.0.1:8080"} print(requests.get(url, proxies=proxies).content)
例如下载图片,可使用:
with requests.get(url, proxies=proxies, stream=True) as r: if r.status_code != 200: return with open(path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk)
更多相关内容 -
Python使用pip安装Numpy模块
2021-01-05 20:59:10python版本:python-3.9.1 操作系统:Windows10 想要安装的模块:numpy 前提 使用pip安装模块,需要保证pip为最新版本。如果使用pip时出现问题提示: You should consider upgrading via the 'python -m pip ...环境
python版本:python-3.9.1 操作系统:Windows10 想要安装的模块:numpy
前提
使用pip安装模块,需要保证pip为最新版本。如果使用pip时出现问题提示:
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
则可以进行pip更新,在cmd下输入:
python -m pip install --upgrade pip
更新成功后会显示:successfully installed 版本号.
pip安装模块
方法一:直接使用 pip install + 要安装的模块名称 (pip install numpy)
因为此方法会Collection pillow收集有关 numpy 的信息,找到之后自动下载。在我的环境下安装未成功,尝试了几种方法之后都未能解决,决定尝试其他方法。
方法二:提前下载相应模块,手动安装
(1)在该网址的搜索框中搜索模块numpy:https://pypi.org/project/numpy/#files
(2)点击第一个结果后,选择左侧的download files,显示如下
(3)选择相应版本:numpy-1.19.4-cp39-cp39-win_amd64.whl 进行下载,
该文件为numpy的1.19.4版本,cp39表示适用于python3.9,win_amd64表示适用于Windows64位系统。
下载完成将其拷贝到python安装路径的Scripts文件夹下面。
(4)打开cmd,跳转到当前路径,具体为: (步骤a) 盘符: (步骤b) cd 绝对路径。输入指令:
pip install numpy-1.19.4-cp39-cp39-win_amd64.whl
完成安装过程。
pycharm中import模块numpy
用如下代码验证即可:
from numpy import * print(random.rand(4,4))
如果能够输出随机矩阵,即安装成功
注:此时上图红框中应该为python的安装路径中的python.exe可执行文件,如果不是需要修改虚拟运行环境。
pycharm修改虚拟运行环境
file - settings - project :pythonProject - python interpreter ,可以看到当前环境拥有的模块,可以看到numpy,代表已经安装成功。
如果未显示numpy,可能是python interpreter 错误。点击右侧绿色圆圈中的按钮可以重新设置运行环境。
点击左下角的➕,可以添加虚拟运行环境,其中的Base interpreter 需要选择python安装路径下的python.exe文件,确定保存即可。
-
python 使用 httpx 发送http2.0 请求
2020-08-06 17:45:37python 使用 httpx 发送http2.0 请求python 使用 httpx 发送http2.0 请求
摘要
python
中最早支持HTTP/2
的是hyper,但这个库近几年都不更新了。最近这批开发人员又出了一个新库,用来支持HTTP/2
,hyper-h2,这个库看提交时间是最近才开始开发的,不过目前看来还没有支持异步的计划。这里,我要介绍的是另一个
HTTP/2
的库httpx
,也是新开发的,准确的来说还是beta
版本。同时支持HTTP/1.1
和HTTP/2
。而且还支持发送异步请求。就笔者写这篇文章的时候,这个项目的star
已经有5.3k
了。
httpx
官方文档地址,如果觉得笔者啰嗦,可以直接阅读官方文档,下面文章只是一篇简单的教程。安装
# 只支持 python3.6 以上版本 pip install httpx
http/2 支持
客户端请求
更有效地利用网络资源
当您使用《快速入门》指南中记录的顶级API进行请求时,HTTPX必须为每个单个请求建立一个新的连接(连接不会被重用)。随着对主机的请求数量增加,这很快变得效率低下。
另一方面,Client实例使用HTTP连接池。这意味着当您向同一主机发出多个请求时,它们Client将重用基础的TCP连接,而不是为每个单个请求重新创建一个。
与使用顶级API相比,这可以带来显着的性能改进,包括:
- 减少了请求之间的延迟(无握手)。
- 减少CPU使用率和往返次数。
- 减少网络拥塞。
额外功能
Client 实例还支持顶级API所不具备的功能,例如:
- Cookie跨请求的持久性。
- 在所有传出请求中应用配置。
- 通过HTTP代理发送请求。
- 使用HTTP / 2。
一般建议:建议使用a Client作为上下文管理器。这将确保离开with模块时正确清理连接:
同步
>>> headers = {'X-Auth': 'from-client'} >>> params = {'client_id': 'client1'} >>> with httpx.Client(headers=headers, params=params, http2=True) as client: # with 内部请求共用一个client,参数也共用 # 替换client的参数 ... headers = {'X-Custom': 'from-request'} ... params = {'request_id': 'request1'} ... r = client.get('https://example.com', headers=headers, params=params)
异步
async with httpx.AsyncClient(http2=True) as client: ...
复杂示例,APNS异步推送到多用户
可参考完整实现代码
import httpx import asyncio async def http2conn(device_token, client, content): r = await client.post(f"/3/device/{device_token}", json=content) logger.info('ios push: ' + device_token) logger.info(r.status_code) # 您可以参考apple apns官方文档,重组下面的推送参数 # 此函数可以在协程中直接调用 async def ios_push(title, text, product, product_id, device_tokens='', **kwargs): """ kwargs={'product':'', 'product_id': '产品id', 'device_token': 'device_token'} """ content = { "aps": { "alert": { "title": title, "body": text, }, }, "classify": product, "carousel_id": product_id, } path = 'dev_certificates.pem' device_tokens = device_tokens.split(',') number = len(device_tokens) // 1000 async with httpx.AsyncClient(base_url=settings.IOS_URL, cert=path, http2=True) as client: http2conn_def = partial(http2conn, client=client, content=content) for i in range(number + 1): limit = i * 1000 await asyncio.gather(*[http2conn_def(device_token) for device_token in device_tokens[limit:limit + 1000]])
http/1 支持
简单请求
>>> r = httpx.get('https://httpbin.org/get') >>>> r = httpx.post('https://httpbin.org/post', data={'key': 'value'}) >>> r = httpx.put('https://httpbin.org/put', data={'key': 'value'}) >>> r = httpx.delete('https://httpbin.org/delete') >>> r = httpx.head('https://httpbin.org/get') >>> r = httpx.options('https://httpbin.org/get')
携带参数,文件,自定义请求头
>>> files = {'upload-file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel')} >>>> headers = {'user-agent': 'my-app/0.0.1'} >>> cookies = {"peanut": "butter"} >>> r = httpx.post('https://httpbin.org/post', data={'key': 'value'}, headers=headers, files=files, cookies=cookies) >>> r.headers Headers({ 'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'connection': 'close', 'server': 'nginx/1.0.4', 'x-runtime': '148ms', 'etag': '"e1ca502697e5c9317743dc078f67693f"', 'content-type': 'application/json' }) >>> r.status_code
同步
>>> headers = {'X-Auth': 'from-client'} >>> params = {'client_id': 'client1'} >>> proxies = { ... "http": "http://127.0.0.1:3080", ... "https": "http://127.0.0.1:3081" ... } >>> with httpx.Client(headers=headers, params=params, proxies=proxies) as client: ... headers = {'X-Custom': 'from-request'} ... params = {'request_id': 'request1'} ... r = client.get('https://example.com', headers=headers, params=params)
异步
HTTPX
默认情况下提供标准的同步API,但是如果需要,还可以为您提供异步客户端的选项。
异步是一种并发模型,其效率远远高于多线程,并且可以提供显着的性能优势并支持使用长期存在的网络连接(例如WebSockets
)。import asyncio import httpx async def main(): async with httpx.AsyncClient() as client: response = await client.get('https://www.example.com/') print(response) asyncio.run(main())
总结
http/1
和http/2
的API基本一致,可参靠上述实现http/1
,另外http/2
只支持客户端方式请求。
这里只是简单的介绍,如需要复杂的功能(流式传输,代理请求,SSL
证书,.netrc
支持等)还是仔细研读官方文档以及源码。 -
Python使用captcha制作验证码
2019-05-07 14:05:52在使用Keras搭建验证码识别模型时,需要大量的验证码图片。在这里,使用captcha模块生成验证码图片,验证码图片名称为验证码上显示的字符串。 1 生成单张验证码图片并显示 生成一张验证码的代码如下: from captcha....在使用Keras搭建验证码识别模型时,需要大量的验证码图片。在这里,使用captcha模块生成验证码图片,验证码图片名称为验证码上显示的字符串。
1 生成单张验证码图片并显示
生成一张验证码的代码如下:
from captcha.image import ImageCaptcha import matplotlib.pyplot as plt import numpy as np import random import string #characters为验证码上的字符集,10个数字加26个大写英文字母 #0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ str类型 characters=string.digits+string.ascii_uppercase width,height,n_len,n_class=170,80,4,len(characters) #设置验证码图片的宽度widht和高度height #除此之外还可以设置字体fonts和字体大小font_sizes generator=ImageCaptcha(width=width,height=height) #生成随机的4个字符的字符串 random_str=''.join([random.choice(characters) for j in range(4)]) #生成验证码 img=generator.generate_image(random_str) #显示验证码图片和验证码标题 plt.imshow(img) plt.title(random_str) plt.show()
程序运行结果为:
2 验证码图片的显示与保存
上面代码中生成的验证码是PIL图像格式,因此也可以直接使用PIL自带的show方法显示图片,save方法保存图片
如下:#显示验证码 img.show() #保存验证码 file_name=random_str+'.jpg' img.save(file_name)
3 批量生成验证码样本集
当我们在深度学习中,进行验证码进行字符识别,需要大量的图片,因此我们可以批量生成大量的样本。这里以生成一万张样本为例。
代码如下:from captcha.image import ImageCaptcha import matplotlib.pyplot as plt import numpy as np import random import string from PIL import Image #characters为验证码上的字符集,10个数字加26个大写英文字母 #0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ str类型 characters=string.digits+string.ascii_uppercase width,height,n_len,n_class=170,80,4,len(characters) #生成一万张验证码 for i in range(10000): generator=ImageCaptcha(width=width,height=height) random_str=''.join([random.choice(characters) for j in range(4)]) img=generator.generate_image(random_str) #将图片保存在目录yzm文件夹下 file_name='./yzm/'+random_str+'_'+str(i)+'.jpg' img.save(file_name)
当程序执行完,会在文件夹yzm下生成一万张验证码图片
-
Ubuntu下Python使用指南
2019-04-27 18:22:04Ubuntu下python配置 Ubuntu简单解决多版本python切换以及多版本pip对应问题 python及库在linux下的目录 在ubuntu下pip需要自行安装 sudo apt-get update sudo apt-get install python3-pip #安装python3.x的pip ... -
python使用m3u8库解析m3u8文件
2021-06-24 21:25:47pip install m3u8 if __name__ == '__main__': play_list = m3u8.load('... for index, segment in enumerate(play_list.segments): ur = segment.uri print(ur) -
python使用相对路径问题
2018-10-24 09:22:49如果使用python相对路径,一定要知道当前路径。因为相对路径相对的就是当前路径。 (1)Edit configurations (2)working directory中就是当前的地址了 然后就可以通过 path='./xxx/xxx/xxx' 来设置相对... -
python使用snappy压缩
2017-02-08 19:48:51今天在网上找了很久,终于找到1个snappy压缩命令行,记录下来:1.wget ...3.yum install gcc-c++4.pip install python-snappy用法:python -m snappy -c uncompressed_file compressed_f -
python使用while循环,输出1-100的奇数和偶数
2020-08-11 19:48:36python使用while循环,输出1-100的奇数和偶数(奇数偶数没分开): a=1 while a<=100: if a%2==0: print(“偶数:%s” %c) else: print(“奇数:%s” %c) a+=1 -
Python 使用清华大学镜像源
2019-05-09 17:12:18那么可以使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 要下的包名 如果是永久修改镜像源 pip install pip -U pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 如果... -
python 使用 UTF-8 编码
2018-01-12 16:28:31一般我喜欢用 utf-8 编码,在 python 怎么使用呢? 使用utf-8 文字 在 python 源码文件中用 utf-8 文字。一般会报错,如下: File "F:\workspace\psh\src\test.py", line 2 SyntaxError: Non-ASCII character... -
python 使用循环求1~100的和,积
2020-03-13 11:57:24#计算1-100之间的整数和 sum = 1 for i in range(2,101): sum += i print(sum) #或者 sum = 0 for i in range(1,101): sum += i print(sum) #计算1-100之间的整数乘积 sum = 1 for i in range(2,101): ...... -
Python使用及交互方式
2021-09-18 16:17:171、交互模式启动python 2、交互模式退出python 3、交互模式python的输入输出数据 4、pycharm开发工具输出数据 5、单行注释与多行注释 6、交互模式输出多行古诗词 7、pycharm开发工具输出古诗词 8、pycharm... -
python使用全局变量的坑,要使用global
2021-10-17 20:58:33 在Python的变量使用中,经常会遇到这样的错误: local variable 'a' referenced before assignment 它的意思是:局部变量“a”在赋值前就被引用了。 比如运行下面的代码就会出现报错这样的问题: a = 3 ... -
Python使用https请求的方法
2021-02-10 12:03:48Python使用https请求的方法发布时间:2020-07-17 11:13:34来源:亿速云阅读:139作者:清晨这篇文章主要介绍Python使用https请求的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!... -
python应用系列教程——python使用SocketServer实现网络服务器,socket实现客户端
2017-10-28 13:02:43python使用SocketServer实现网络服务器SocketServer简化了网络服务器的编写。在进行socket创建时,使用SocketServer会大大减少创建的步骤,并且SocketServer使用了select它有4个类:TCPServer,UDPServer,... -
Python 使用readability 提取网页标题
2021-05-13 23:45:17本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末 readability 安装 pip install readability-lxml PS:readability有两个版本一个readability,一个readability-lxml注意不要装错。 readability ... -
Python使用pip下载的第三方库存放的路径
2018-11-20 14:34:55找到python的安装目录,我的是 F:\Installation position\Python\Python37-32\ ...而使用pip下载的第三方库就存于以下目录: F:\Installation position\Python\Python37-32\Lib\site-packages ... -
logging的陷阱:python使用logging不能写日志,写不出日志
2017-08-13 21:05:54当分别使用request和checkcode时均没有问题,但是,将两个模块都导入后,写日志就出现异常.总是一个能写日志,一个不能写日志.原因因为两个文件中都是使用logging配置文件的方式创建logger,而且这两个模块都使用的不是同... -
python使用goto的正确用法
2020-08-26 11:34:34看了一篇文章,都是直接官网的列子,根本不能用,所以自己搜集了资料,接下来介绍 这三个包是要用的,而不是只有最后一个 import goto from dominate.tags import label from goto import with_goto 这个...谨慎使用 -
python使用numpy中的size()函数实例用法详解
2021-02-03 09:55:20在python中,提到如何计算多维数组和矩阵,那一定会想到numpy。numpy定义了矩阵和数组,为它们提供了相关的运算。size中文解释为大家、尺寸的意思,如果想要统计矩阵元素个数,使用size()函数就可以解决。1、Numpy ... -
python使用pandas获取数据行名和列名
2021-01-07 16:10:26python使用pandas读取csv数据: import pandas as pd df = pd.read_csv("filename.csv") 获取数据部分: data = df.values 获取行名: rownames = df.index 获取列名: colnames = df.columns -
python使用pclpy实现PCD点云读取和显示
2019-06-11 08:39:55通过python的pclpy依赖,可以在python中使用pcl点云库的接口,调用其操作点云的方法。 最官方的pcl的python支持是python-pcl,但是我好长时间没有安装成功。有一次直接安装上了pclpy(可以提供过pip安装也可以在... -
Python字符串函数使用详解
2021-12-16 19:34:01Python的友好在于提供了非常好强大的功能函数模块,对于字符串的使用,同样提供许多简单便捷的字符串函数。Python 字符串自带了很多有用的函数,在字符串函数之前先介绍一个非常实用的dir()内置函数,因为对每一个... -
Python base64简单使用
2022-02-17 16:06:20最简单的加解密实例: import base64 str1 = 'askdhfiwqnshfdhnqpjdnfswadfjnvasfrnm=' str2 = base64.b64encode(str1) str3 = base64.b64decode(str2) -
Python使用阿里云镜像
2020-02-22 01:26:48Python使用阿里云镜像 临时使用 pip install -i https://mirrors.aliyun.com/pypi/simple/ 包名 以后都使用阿里云的源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ ... -
一分钟学会Python中pip的安装与使用
2021-06-13 19:52:05pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装和卸载的功能,现在大家用到的所有包不是自带的就是通过pip安装的。Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。给出pip官网链接... -
Cygwin中自带的python使用
2018-06-29 09:34:321、Cygwin安装完成之后自带python,一开始以为只有python2版本,一直找方法想要使用win7系统自己安装的python3,找到以下方法:在windows下面安装的python一般都已经添加到了系统变量中。参照在在Cygwin中使用Python... -
Python中for语句的使用方法
2022-02-16 10:46:53Python中列表和字符串的使用方法请参考《Python中List的使用方法2-1》、《Python中List的使用方法2-2》、《Python中字符串的使用方法2-1》和《Python中字符串的使用方法2-2》。 1 基本语法 for语句的基本语法是: ... -
Python使用HTTP代理 Proxy
2017-03-12 09:50:11urllib2是Python标准库,功能很强大,只是使用起来稍微麻烦一点。在Python 3中,urllib2不再保留,迁移到了urllib模块中。urllib2中通过ProxyHandler来设置使用代理服务器。 proxy_handler = urllib2.ProxyHandler...