找到
8
篇与
Python语言
相关的结果
-
21.4K⭐!像人类一样操控网页,这款开源自动化项目牛逼! 大家好,我是开源君! 当前动化技术和 AI 的发展日新月异,而浏览器作为我们日常工作和生活中必不可少的工具,其自动化操作的需求也日益增长。但手动操作浏览器不仅费时费力,还容易出错。 今天给大家带来一个超级炫酷的开源项目 - Browser Use,能让你的 AI 助手像人类一样操控网页,从此你的工作效率将直线上升。 图片 项目简介 Browser Use是一个开源库,用 Python 写的,专门让 AI 来控制浏览器完成各种任务。它结合了自然语言处理、Playwright(一个浏览器自动化工具)和大型语言模型(比如 GPT-4、Claude 等),让 AI 能够像人类一样浏览网页、点击链接、填写表单、提取信息,甚至还能做更复杂的操作,比如自动找工作、写文档、保存文件等等。 图片 这个项目在 GitHub 上已经火得不行了,Star 数都已经 21.4K 了!而且它的社区也很活跃,大家都在分享各种有趣的用法,比如用它来自动订机票、监控商品价格、写感谢信之类的。 图片 性能特色 支持多标签页管理:在处理复杂的网页任务时,Browser Use 能够自动管理多个标签页,确保 AI 代理能够高效地在不同页面之间切换。 视觉识别与内容提取:Browser Use 能够自动解析网页内容,提取出文本、图片等视觉元素以及 HTML 结构,为 AI 代理提供丰富的输入信息。 支持多种 LLM:Browser Use 与 LangChain 紧密集成,支持使用任何 LangChain 支持的 LLM 模型。这意味着你可以根据自己的需求选择合适的 LLM 模型,以实现最佳的自动化效果。 自我纠正机制:在处理网页任务时,Browser Use 通过提供自我纠正机制,在发现错误时重新尝试或调整策略,从而提高了自动化任务的成功率。 快速安装使用 快速上手 Browser Use 很简单的,先要安装 Browser Use 及其依赖项。可以使用 pip 命令来完成安装: pip install browser-use playwright playwright install然后,在.env文件中配置大模型 API 密钥,例如: LANGCHAIN_API_KEY=your_langchain_api_key PLAYWRIGHT_BROWSER_TYPE=chromium # 指定浏览器类型,如chromium、firefox等接下来,就可以开始写代码啦!下面是一个简单的示例,展示了如何使用 Browser Use 来自动化查找从巴厘岛到阿曼的单程航班,并在 Google Flights 上返回最便宜的选项: from langchain_openai import ChatOpenAI from browser_use import Agent import asyncio async def main(): # 初始化AI代理,并设置任务描述和LLM模型 agent = Agent( task="Find a one-way flight from Bali to Oman on 12 January 2025 on Google Flights. Return me the cheapest option.", llm=ChatOpenAI(model="gpt-4") # 这里使用GPT-4模型,你可以根据需求选择其他模型 ) # 运行AI代理并获取结果 result = await agent.run() print(result) # 运行主函数 asyncio.run(main())只需几行代码,就能让 AI 帮你完成复杂的网页操作,是不是很方便? 项目体验展示 Browser Use 的应用场景非常广泛,比如自动查找航班信息、数据收集、监控商品价格、自动填写表单、自动写文档等等。 图片 自动查找航班信息图片 数据收集图片 自动写文档Browser Use是一个非常实用的开源项目,它极大地拓展了自动化应用的边界,让 AI 助手能够像人类一样操控网页。无论是开发者还是普通用户,都能从中受益。未来,随着 AI 技术的不断发展和浏览器自动化需求的日益增长,Browser Use 有望成为更多人的首选工具之一。 更多细节功能,感兴趣的可以到项目地址查看: 项目地址:隐藏内容,请前往内页查看详情
-
36K⭐ 微软放大招了!音频也能转 Markdown 软件介绍 图片 MarkItDown 是由微软开发的一款开源工具,专门用来将各种文件格式转换成 Markdown 格式。Markdown 是一种轻量级的标记语言,非常适合用来做笔记、写文档,还能方便地在各种平台上展示。MarkItDown 就像是一个“文件翻译官”,能帮你把复杂的文件格式转换成简洁易读的 Markdown,简直就是办公和学习的必备神器!主要功能 图片 MarkItDown 的功能强大到令人咋舌!它支持的文件格式多到你想不到,PDF、Word、PPT、Excel、图片、音频、HTML,甚至连 ZIP 文件都能搞定!而且,它还能提取图片的 EXIF 元数据,甚至通过 OCR 识别图片中的文字。对于音频文件,它还能提取元数据并进行语音转录,简直太神奇了!用它处理文件,就像拥有了一个“万能转换器”,再也不用担心文件格式的问题了。开源成就 目前已经获得 36K Star 图片 安装指南 安装 MarkItDown 超简单!如果你熟悉 Python,直接用 pip 安装就行: pip install markitdown要是想从源代码安装,也只需要运行: pip install -e .使用起来也很方便,比如你想把一个 PDF 文件转换成 Markdown,只需要在命令行输入: markitdown path-to-file.pdf > document.md或者直接指定输出文件: markitdown path-to-file.pdf -o document.md要是用 Python API,就更灵活了。比如: from markitdown import MarkItDown md = MarkItDown() result = md.convert("test.xlsx") print(result.text_content)转换音频文件,进行语音转文字 from markitdown import MarkItDown audio_result = markitdown.convert("example.mp3") print(audio_result.markitdown)是不是超简单?而且它还有 Docker 支持,用 Docker 运行也非常方便。 总结 MarkItDown 真的是一个超级实用的工具。有了它,文件转换再也不用愁了!如果你还在为文件格式转换而烦恼,赶紧试试 MarkItDown 吧!开源地址: 隐藏内容,请前往内页查看详情
-
如何在 Telegram 网页版中实现图片上传并自动生成图床链接 如何在 Telegram 网页版中实现图片上传并自动生成图床链接 原网站地址:6v6.ren 在使用 Telegram 网页版时,你可能需要将图片上传到图床并获取链接,以便在其他地方使用。虽然 Telegram 网页版本身没有直接支持这一功能,但通过一些第三方工具和服务,你可以轻松实现这一需求。以下是几种可行的解决方案: 1. 使用基于 Cloudflare Pages 和 Telegram 的图床工具 项目地址 CloudFlare-ImgBed 功能特点 支持图片、视频、动图等多种文件格式。 支持批量上传和实时上传进度显示。 上传完成后可直接复制 Markdown、HTML 等格式的链接。 支持自定义压缩质量和身份认证。 使用方法 部署 Cloudflare Pages: 在 GitHub 上克隆CloudFlare-ImgBed项目。 配置config.json文件,填写 Telegram Bot Token 和 Channel ID。 使用 Cloudflare Pages 部署项目。 上传图片: 打开部署好的图床工具页面。 将图片拖入上传区域或点击上传按钮选择图片。 上传完成后,复制生成的 Markdown 或 HTML 链接。 2. 使用 Telegram Bot 实现图床功能 项目地址 img-mom 功能特点 支持将图片上传到 Telegram 图床或其他支持的图床服务。 返回图片链接,支持多种格式(如 Markdown、HTML)。 可通过/settings指令设置其他图床服务。 使用方法 部署 Telegram Bot: 在 GitHub 上克隆img-mom项目。 配置config.json文件,填写 Telegram Bot Token 和 Channel ID。 使用 Docker 或其他方式部署项目。 使用 Bot 上传图片: 将图片发送给机器人,机器人会返回 Telegram 图床链接。 可通过/settings指令设置其他图床服务。 3. 结合 PicGo 和图床服务 功能特点 使用 PicGo 作为图床工具,支持多种图床服务。 可以通过配置支持 Telegram 图床的插件,实现图片上传并自动生成链接。 使用方法 安装 PicGo: 下载并安装 PicGo:PicGo 官网 配置图床服务: 安装支持 Telegram 图床的插件,如telegraph-image-uploader。在 PicGo 中配置图床服务,填写 API 地址和其他必要信息。 上传图片:打开 PicGo,选择需要上传的图片。上传完成后,PicGo 会生成图片链接,你可以复制并使用。 4. 使用 Telegraph API 功能特点 Telegraph 是 Telegram 提供的一个服务,可以上传图文并生成链接。 适用于图床需求,支持图片、视频等多种文件格式。 使用方法 使用 Telegraph API 上传图片: 创建一个 Telegram Bot 并获取 API Token。 使用 Telegraph API 上传图片,获取返回的图片链接。 示例代码(Python): import requestsdef upload_image_to_telegraph(image_path, api_token): url = "https://api.telegra.ph/upload" headers = {"Authorization": f"Bearer {api_token}"} files = {"file": open(image_path, "rb")} response = requests.post(url, headers = headers, files = files) if response.status_code == 200: return response.json()[0]["src"] else : return None # 示例使用api_token = "你的Telegram Bot Token" image_path = "本地图片路径" image_link = upload_image_to_telegraph(image_path, api_token) print("图片链接:", image_link)结合 Cloudflare Workers 部署: 使用 Cloudflare Workers 编写一个简单的 API,调用 Telegraph API 上传图片。 部署完成后,通过自定义域名访问图床工具。 注意事项 文件大小限制:Telegram 对图片大小有限制(最大 5MB),部分服务可能会自动压缩图片。 部署和配置:部分方案需要一定的技术基础进行部署和配置,例如设置 Cloudflare Workers、Telegram Bot 等。
-
Python 利用无头浏览器爬虫爬取笔趣阁小说 前言 用户有需求,需要将笔趣阁的小说便捷地保存为文档到本地。笔趣阁有反爬措施,小说内容为 JS 动态生成,Python 的requests库与requests_html已无法满足需求,因此使用类似 selenium 但非 selenium 的无头浏览器爬虫实现小说爬取。 教程步骤 下载安装 Chromium 明确 Chromium 默认安装路径 编写代码 明白爬取参数与注意事项 开始爬取 查看结果 步骤 1. 下载安装 Chromium 下载方式一:官网下载 -> Chromium 下载链接 下载方式二:夸克网盘下载保存 -> Chromium 下载器 下载后,直接双击安装器完成安装。 步骤 2. 明确 Chromium 默认安装路径 安装后,需要明确默认安装的位置,因为代码中会用到。我的电脑用户名为AW,因此被安装在了如下路径:C:\Users\AW\AppData\Local\Chromium\Application\chrome.exe 步骤 3. 编写代码 这段代码中用到的库主要为pyppeteer和python-docx,这两个库需额外下载。 最终代码如下: import asyncio import os from docx import Document from pyppeteer import launch # 禁用自动下载Chromium os.environ["PYPPETEER_SKIP_CHROMIUM_DOWNLOAD"] = "true" async def main(): wordName = "宿命之环1~3章.docx" # Word文件名 netName = "https://www.22biqu.com" # 笔趣阁域名 firstPagePath = "/biqu5251/5259122.html" # 起始页路径 endPagePath = "/biqu5251/5259124.html" # 结束页路径 catchUrl = netName + firstPagePath pageCount = 0 endFlag = False while True: try: doc = Document(wordName) except: doc = Document() browser = await launch(executablePath=r'C:\Users\AW\AppData\Local\Chromium\Application\chrome.exe', headless=True) page = await browser.newPage() await page.goto(catchUrl) element = await page.querySelector('h1.title') if element: text = await page.evaluate('(element) => element.innerText', element) doc.add_heading(text, level=1) else: print('Element not found.') content_element = await page.querySelector('#content') if content_element: paragraphs = await content_element.querySelectorAll('p') for paragraph in paragraphs: text = await page.evaluate('(p) => p.innerText', paragraph) doc.add_paragraph(text) else: print('Content element not found.') element = await page.querySelector('#next_url') next_url = "" if element: next_url = await page.evaluate('(element) => element.getAttribute("href")', element) catchUrl = netName + next_url else: print('Element not found.') await browser.close() doc.save(wordName) if endFlag: break pageCount += 1 print("已完成页码" + str(pageCount)) if next_url == endPagePath: print("匹配到结束链接:" + str(endPagePath)) print("即将结束") endFlag = True asyncio.run(main())步骤 4. 明白爬取参数与注意事项 在使用上述代码时,需要注意以下参数: wordName:爬取后 Word 保存的名称,建议爬什么就取什么名,且加上多少章到多少章。 firstPagePath:起始页路径,比如从《宿命之环》第 3 章开始爬起,则路径为/biqu5251/5259124.html。 endPagePath:结束页路径,建议不要与起始页隔得太远,否则 Word 文件会因字数过多而卡顿。建议分章节爬取。 步骤 5. 开始爬取 设置好参数后,直接运行代码即可。爬取完成后,小说将以 Word 文档形式保存到本地。 步骤 6. 查看结果 打开保存的 Word 文件,章节标题和内容将整齐排列,还可通过章节导航快速定位。 结语 此教程适用于 Python 初学者,后续可优化为 PyQt 程序,提升用户体验。
-
绝了!图片可以直接转成代码!开发是越来越简单了~~~ 平时我们浏览网站的时候,经常会遇到令人眼前一亮的网页设计,如果能够将这些设计元素或者整个页面的布局应用到自己的项目中,那该多好? 今天就就给大家介绍一个能够将截图转为代码的开源项目 screenshot-to-code。 screenshot-to-code 项目通过结合先进的 AI 技术,为开发者和设计师提供了一个从视觉设计到代码实现的高效工具,极大地简化了开发流程。 screenshot-to-code 可以把界面设计截图直接转化为 HTML、CSS 或 JavaScript 代码,这样能帮助开发者快速生成网页前端代码。无论是一个按钮、一个导航栏,还是整个页面布局都能从截图转换成实际的前端代码。 图片 screenshot-to-code支持将截图转换成 HTML、Tailwind CSS、React 和 Vue 等现代技术栈的代码 。 用户还可以输入 URL 来克隆实时网站 。 图片 现在支持 Claude Sonnet 3.5 和 GPT-4o! {iframe src="https://www.lequxiang.com.cn/view.php/5bdd13d974c3bcdf09c0f55de4c58840.mp4" height="40vh"/} {iframe src="https://www.lequxiang.com.cn/view.php/d5ec12c1432e8e9fef6d375a2f452b99.mp4" height="40vh"/} 开源地址:隐藏内容,请前往内页查看详情 官方网站:隐藏内容,请前往内页查看详情 支持的技术栈: HTML + Tailwind HTML + CSS React + Tailwind Vue + Tailwind Bootstrap Ionic + Tailwind SVG 支持的人工智能模型: Claude Sonnet 3.5 GPT-4o DALL-E 3 或 Flux Schnell(使用 Replicate)用于图像生成 此外,该项目还可以将网站的视频/录屏转换成网页,演示如下: {iframe src="https://www.lequxiang.com.cn/view.php/603a2aed15a31b1962e64eee146f299e.mp4" height="50vh"/} 安装使用 该项目使用 React/Vite 作为前端, FastAPI 作为后端。 需要 GPT-4 的 OpenAI API 密钥或 Anthropic 密钥(可选), 推荐两者都使用,以便你可以比较 Claude 和 GPT4o 的结果。 运行后端(使用 Poetry 进行包管理 - 如果你没有它,请安装 pip install poetry): cd backend echo "OPENAI_API_KEY=sk-your-key" > .env echo "ANTHROPIC_API_KEY=your-key" > .env poetry install poetry shell poetry run uvicorn main:app --reload --port 7001OpenAI API 密钥也可以通过前端的对话框设置密钥(加载前端后点击齿轮图标)。 图片 运行前端: cd frontend yarn yarn dev然后打开 http\://localhost:5173 就可以开始使用了。 图片 如果要使用其他端口,请更新 frontend/.env.local 中的 VITE\_WS\_BACKEND\_URL 配置选项。 如果你不想浪费 GPT4-Vision,你可以在模拟模式下运行后端: MOCK=true poetry run uvicorn main:app --reload --port 7001Docker 上安装 如果你已经安装了 Docker,可以使用 docker-compose 命令启动该项目: echo "OPENAI_API_KEY=sk-your-key" > .env docker-compose up -d --build接下来就可以在浏览器中打开 http://localhost:5173 使用了。 图片
-
你知道 Python 其实自带了小型数据库吗 DBM(DataBase Manager) DBM(DataBase Manager)是一种文件系统,专门用于键值对的存储,最初是在 Unix 平台实现,现在其它平台也可以用。对于 KV 模型,DBM 提供了一个轻量级、高效的存储解决方案。 总的来说,DBM 具有如下特点: 简单快速:非常简单易用,读取和写入操作都很快,适合存储少量数据。 键值对存储:数据是以键值对形式存储的,你可以像操作 Python 字典一样。 文件存储:数据存在具体的文件中,可以轻松地备份和转移。 不支持复杂查询:如果需要执行复杂查询或需要关系型数据库的功能,DBM 可能不是一个好选择。 而 Python 标准库提供了一个 dbm 模块,它实现了 DBM 文件系统的功能,来看一下它的用法。 import dbm # 第一个参数是文件名 # 第二个参数是模式,有以下几种 # r:只读,要求文件必须存在,默认就是这个模式 # w:可读可写,要求文件必须存在 # c:可读可写,文件不存在会创建,存在则追加 # n:可读可写,文件不存在会创建,存在则清空 # 第三个参数是权限,用八进制数字表示,默认 0o666,即可读可写不可执行 db = dbm.open("store", "c") # 打开文件就可以存储值了,key 和 value 必须是字符串或 bytes 对象 db["name"] = "S せんせい" db["age"] = "18" db[b"corporation"] = "小摩".encode("utf-8") # 关闭文件,将内容写到磁盘上 db.close()非常简单,就像操作字典一样,并且 key 是唯一的,如果存在则替换。执行完后,当前目录会多出一个 store.db 文件。 图片 我们打开它,然后读取刚才写入的键值对。 import dbm db = dbm.open("store", "c") # 获取所有的 key,直接返回一个列表 print(db.keys()) """ [b'corporation', b'name', b'age'] """ # 判断一个 key 是否存在,key 可以是字符串或 bytes 对象 print("name" in db, "NAME" in db) """ True False """ # 获取一个 key 对应的 value,得到的是 bytes 对象 print(db["name"].decode("utf-8")) print(db[b"corporation"].decode("utf-8")) """ S せんせい 小摩 """ # key 如果不存在,会抛出 KeyError,我们可以使用 get 方法 print(db.get("NAME", b"unknown")) """ b'unknown' """ # 当然也可以使用 setdefault 方法,key 不存在时,自动写进去 print(db.setdefault("gender", b"female")) """ b'female' """ print(db["gender"]) """ b'female' """非常简单,当你需要存储的数据量不适合放在内存中,但又没必要引入数据库,那么不妨试试使用 dbm 模块吧。 当然啦,dbm 虽然很方便,但它只能持久化 bytes 对象,字符串也是转成 bytes 对象之后再存储的。所以除了 dbm 之外,还有一个标准库模块 shelve,它可以持久化任意对象。 shelve shelve 的使用方式和 dbm 几乎是一致的,区别就是 shelve 的序列化能力要更强,当然速度自然也就慢一些。 import shelve # 第二个参数表示模式,默认是 c # 因此文件不存在会创建,存在则追加 sh = shelve.open("shelve") sh["name"] = ["S 老师", "高老师", "电烤🐔架"] sh["age"] = {18} sh["job"] = {"tutu": "大学生", "xueer": "医生"} # 关闭文件,刷到磁盘中 sh.close()执行完之后,本地会多出一个 shelve.db 文件,下面来读取它。 import shelve sh = shelve.open("shelve") print(sh["name"]) print(sh["name"][2] == "电烤🐔架") """ ['S 老师', '高老师', '电烤🐔架'] True """ print(sh["age"]) """ {18} """ print(sh["job"]) """ {'tutu': '大学生', 'xueer': '医生'} """ sh.close()读取出来的就是原始的对象,我们可以直接操作它。 然后自定义类的实例对象也是可以的。 import shelve class People: def __init__(self, name, age): self.name = name self.age = age @property def print_info(self): return f"name is {self.name}, age is {self.age}" sh = shelve.open("shelve") p = People("群主", 58) # 将类、和该类的实例对象存储进去 sh["People"] = People sh["p"] = p sh.close()执行完之后,我们打开它。 import shelve sh = shelve.open("shelve") # 需要注意的是,People 是我们自己定义的类 # 如果你想要将其还原出来,那么该类必须要出现在当前的命名空间中 try: sh["People"] except AttributeError as e: print(e) """ Can't get attribute 'People' on <module ...> """ class People: def __init__(self, name, age): self.name = name self.age = age @property def print_info(self): return f"name is {self.name}, age is {self.age}" print(sh["People"] is People) """ True """ print(sh["p"].print_info) """ name is 群主, age is 58 """ print(sh["People"]("群主", 38).print_info) """ name is 群主, age is 38 """这就是 shelve 模块,非常强大,当然它底层也是基于 pickle 实现的。如果你不需要存储复杂的 Python 对象,只需要存储字符串的话,那么还是推荐 dbm。 然后在使用 shelve 的时候,需要注意里面的一个坑。 import shelve # 打开文件,设置键值对 sh = shelve.open("shelve") sh["name"] = "古明地觉" sh["score"] = [80, 80, 80] sh.close() # 重新打开文件,修改键值对 sh = shelve.open("shelve") sh["name"] = "芙兰朵露" sh["score"].append(90) sh.close() # 再次重新打开文件,查看键值对 sh = shelve.open("shelve") print(sh["name"]) print(sh["score"]) """ 芙兰朵露 [80, 80, 80] """ sh.close()第一次打开文件创建两个键值对,第二次打开文件将键值对修改,第三次打开文件查看键值对。但是我们发现 sh["name"] 变了,而 sh["score"] 却没变,这是什么原因? 当我们修改 name 时,采用的是直接赋值的方式,会将原本内存里的值给替换掉。而修改 score 时,是在原有值的基础上做 append 操作,它的内存地址并没有变。 所以可变对象在本地进行修改,shelve 默认是不会记录的,除非创建新的对象,并把原有的对象给替换掉。所以 sh["score"].append(90) 之后,sh["score"] 仍是 [80, 80, 80],而不是 [80, 80, 80, 90]。 因为 shelve 没有记录对象自身的修改,如果想得到期望的结果,一种方法是把对象整体换掉。也就是让 sh["score"] = [80, 80, 80, 90],这样等于是创建了一个新的对象并重新赋值,是可行的。 或者你在打开文件的时候,多指定一个参数 writeback。 import shelve # 打开文件,设置键值对 sh = shelve.open("shelve") sh["name"] = "古明地觉" sh["score"] = [80, 80, 80] sh.close() # 重新打开文件,修改键值对 sh = shelve.open("shelve", writeback=True) sh["name"] = "芙兰朵露" sh["score"].append(90) sh.close() # 再次重新打开文件,查看键值对 sh = shelve.open("shelve") print(sh["name"]) print(sh["score"]) """ 芙兰朵露 [80, 80, 80, 90] """ sh.close()可以看到都发生改变了,但这个参数会导致额外的内存消耗。当指定 writeback=True 的时候,shelve 会将读取的对象都放到一个内存缓存当中。比如我们操作了 20 个持久化的对象,但只修改了一个,剩余的 19 个只是查看并没有做修改,但当 sh.close() 的时候,会将这 20 个对象都写回去。 因为 shelve 不知道你会对哪个对象做修改,所以不管你是查看还是修改,都会放到缓存当中,然后再一次性都写回去。这样就会造成两点影响: shelve 会把我们使用的对象放到内存的另一片空间中,等于是额外拷贝了一份。 虽然操作了 N 个对象,但只修改了 1 个,而 shelve 会把 N 个对象都重新写回去,从而造成性能上的问题,导致效率降低。 因此加不加这个参数,由具体情况决定。 综上所述,Python 算是自带了小型数据库,看看能不能在合适的场景中把它用上。
-
一款美观的 HTTP 性能监测工具:HTTPStat reorx/httpstat 是一个旨在提供更美观和详细HTTP请求统计信息的cURL命令行工具,它能够帮助开发者和运维人员深入理解HTTP请求的性能和状态。 图片 1. 基本概述 • 项目地址:回复可见 • 语言:该工具主要是以Python编写,保证了跨平台兼容性(Windows、BSD、Linux)以及高性能。 • 功能:模仿经典的网络诊断工具curl,但提供更详细、更易于理解的HTTP请求统计信息,包括连接时间、DNS解析时间、TLS握手时间、响应时间等。 2. 主要特性 •详细统计信息:提供包括DNS解析时间、建立连接时间、TLS/SSL握手时间、首字节时间、总时间等在内的详细统计信息,帮助用户快速定位性能瓶颈。 •支持协议:全面支持HTTP和HTTPS协议,对于自签名证书,可以使用特定选项(如-k)跳过验证。 •灵活性:支持自定义HTTP方法(如GET、POST、PUT等),传递请求体数据,以及添加额外的请求头信息。 •代理支持:通过环境变量HTTP_PROXY和HTTPS_PROXY支持通过HTTP或HTTPS代理进行请求。 •性能调试:在开发过程中,帮助确定API调用的性能瓶颈。 •服务器监控:在生产环境中,定期使用httpstat检查关键服务的状态,及时发现并解决问题。 •易用性:通过简单的命令行接口,无需复杂配置即可进行测试。 项目地址 隐藏内容,请前往内页查看详情 3. 使用方法 •安装:如果是基于Python的版本,可以通过pip安装:pip install httpstat 。如果是基于Go的版本,可以通过go get安装:go install github.com/davecheney/httpstat@latest(注意,这里的GitHub路径可能因版本或分支不同而有所变化)。 •执行测试:安装完成后,在命令行中运行httpstat命令,后跟要测试的URL,例如:httpstat https://www.example.com 。 •自定义配置:通过命令行参数(如-H添加请求头,-d传递请求体等)或环境变量(如HTTPSTAT\_DEBUG启用调试模式)进行自定义配置。 4. 应用场景 •开发者调试:在开发API或集成第三方服务时,快速定位网络问题。 •运维监控:定期执行对关键服务的检查,预防潜在问题。 •性能优化:根据统计信息,对Web应用程序进行性能优化。 •网络安全检测:通过查看TLS握手时间,评估网站的安全配置。 5. 结论 reorx/httpstat 是一个功能强大、易于使用的HTTP性能监测工具,它提供了详细的统计信息和灵活的自定义配置选项,帮助开发者和运维人员更好地理解和优化HTTP请求的性能。无论是进行性能调试、服务器监控还是网络安全检测,httpstat 都是一个不可多得的好帮手。
-
PHPY 打破语言界限,使PHP引入Python生态,开创PHP语言AI编程时代! PHPY是什么? phpy 是识沃团队最新推出的开源项目,目标是为 PHP 引入 Python 生态,来弥补 PHP 生态的空缺和不足。phpy 使得 PHP 可以调用所有 Python 的包。包括当下非常流行的 AI 库,如:PyTorch、transformers、TensorFlow 等包括当下非常流行的 AI 库,如 PyTorch、transformers、TensorFlow 等,以及科学计算库,如 Numpy、Pandas、Scikit 等,还可以使用图形界面库,如 PyQt、wxPython 等。 不建议在 php-fpm/apache 短生命周期运行环境下使用,频繁地导入/销毁模块的开销会消耗大量资源环境 Linux环境:Ubuntu 22.04.3 LTS PHP版本:PHP 8.1 或以上版本 Python 3.10 或以上版本 安装PHP8.3 下载 wget wget https://www.php.net/distributions/php-8.3.0.tar.gz tar -zxvf php-8.3.0.tar.gz下载地址:https://www.php.net/downloads安装依赖包 sudo apt-get install libfcgi-dev libfcgi0ldbl libjpeg-turbo8-dev libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev libzip-dev libsqlite3-dev libonig-dev pkg-config libxml2-dev libkrb5-dev libssl-dev libsqlite3 libbz2-dev libpng-dev libjpg-dev libfreetype6-dev libc-client2007e-dev libonig-dev libreadline-dev libxslt-dev libzip-dev如果安装的依赖包不存在,请通过命令:apt-cache search freetype 查找相应的安装包安装即可编译 ./configure \ --prefix=/usr/local/php-8.3 \ --with-config-file-path=/usr/local/php-8.3/etc \ --with-zlib-dir \ --with-freetype \ --enable-mbstring \ --enable-soap \ --enable-calendar \ --with-curl \ --with-zlib \ --enable-gd \ --disable-rpath \ --enable-inline-optimization \ --with-bz2 \ --with-zlib \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-pcntl \ --enable-mbregex \ --enable-exif \ --enable-bcmath \ --with-mhash \ --with-zip \ --with-pdo-mysql \ --with-mysqli \ --with-mysql-sock=/var/run/mysqld/mysqld.sock \ --with-jpeg \ --with-openssl \ --with-fpm-user=www \ --with-fpm-group=www \ --with-libdir=/lib/x86_64-linux-gnu \ --enable-ftp \ --with-kerberos \ --with-gettext \ --with-xmlrpc \ --with-xsl \ --enable-opcache \ --enable-intl \ --with-pear \ --enable-fpm编译安装 make make install配置文件 核心 php.ini 配置文件cp php.ini-production /usr/local/php-8.3/etc/php.ini查看PHP版本/usr/local/php-8.3/bin/php -v PHP 8.3.0 (cli) (built: Dec 5 2023 20:03:56) (NTS) Copyright (c) The PHP Group Zend Engine v4.3.0, Copyright (c) Zend Technologies安装Python 安装Anaconda Anaconda 是一个开源的Anaconda是专注于数据分析的Python发行版本,包含了conda、Python等190多个科学包及其依赖项。 Anaconda就是可以便捷获取包且对包能够进行管理,包括了python和很多常见的软件库和一个包管理器conda。常见的科学计算类的库都包含在里面了,使得安装比常规python安装要容易,同时对环境可以统一管理的发行版本。 下载地址:https://www.anaconda.com/download#downloads wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh命令行中切换到anaconda文件所在目录 sh Anaconda3-2022.05-Linux-x86_64.sh accept the license terms--yes默认安装路径,/home/用户名/anaconda3=查看Anaconda版本 终端输入 conda --version 或者 conda -V /home/www/anaconda3/condabin/conda --version conda 23.7.4创建虚拟环境 $ conda create -n tinywan-python310 python=3.10 Collecting package metadata (current_repodata.json): done Solving environment: done ==> WARNING: A newer version of conda exists. <== current version: 23.7.4 latest version: 23.11.0 Please update conda by running $ conda update -n base -c defaults conda Or to minimize the number of packages updated during conda update use conda install conda=23.11.0 ## Package Plan ## environment location: /home/www/anaconda3/envs/tinywan-python310 added / updated specs: - python=3.10 The following packages will be downloaded: package | build ---------------------------|----------------- pip-23.3.1 | py310h06a4308_0 2.7 MB python-3.10.13 | h955ad1f_0 26.8 MB setuptools-68.0.0 | py310h06a4308_0 936 KB wheel-0.41.2 | py310h06a4308_0 109 KB ------------------------------------------------------------ Total: 30.5 MB The following NEW packages will be INSTALLED: _libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main _openmp_mutex pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu bzip2 pkgs/main/linux-64::bzip2-1.0.8-h7b6447c_0 ca-certificates pkgs/main/linux-64::ca-certificates-2023.08.22-h06a4308_0 ld_impl_linux-64 pkgs/main/linux-64::ld_impl_linux-64-2.38-h1181459_1 libffi pkgs/main/linux-64::libffi-3.4.4-h6a678d5_0 libgcc-ng pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1 libgomp pkgs/main/linux-64::libgomp-11.2.0-h1234567_1 libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1 libuuid pkgs/main/linux-64::libuuid-1.41.5-h5eee18b_0 ncurses pkgs/main/linux-64::ncurses-6.4-h6a678d5_0 openssl pkgs/main/linux-64::openssl-3.0.12-h7f8727e_0 pip pkgs/main/linux-64::pip-23.3.1-py310h06a4308_0 python pkgs/main/linux-64::python-3.10.13-h955ad1f_0 readline pkgs/main/linux-64::readline-8.2-h5eee18b_0 setuptools pkgs/main/linux-64::setuptools-68.0.0-py310h06a4308_0 sqlite pkgs/main/linux-64::sqlite-3.41.2-h5eee18b_0 tk pkgs/main/linux-64::tk-8.6.12-h1ccaba5_0 tzdata pkgs/main/noarch::tzdata-2023c-h04d1e81_0 wheel pkgs/main/linux-64::wheel-0.41.2-py310h06a4308_0 xz pkgs/main/linux-64::xz-5.4.5-h5eee18b_0 zlib pkgs/main/linux-64::zlib-1.2.13-h5eee18b_0 Proceed ([y]/n)? y Downloading and Extracting Packages Preparing transaction: done Verifying transaction: done Executing transaction: done # # To activate this environment, use # # $ conda activate tinywan-python310 # # To deactivate an active environment, use # # $ conda deactivate激活虚拟环境 conda activate tinywan-test查看已有的虚拟环境 $ conda env list # conda environments: # base /home/www/anaconda3 tinywan-test * /home/www/anaconda3/envs/tinywan-test进入虚拟环境查看Python版本 (tinywan-python310) www@xxxxxxx:~/anaconda3$ python --version Python 3.10.13安装phpy 下载 git clone https://github.com/swoole/phpy.git生成 ./configure 配置文件 /usr/local/php-8.3/bin/phpize --with-php-config=/usr/local/php-8.3/bin/php-config指定配置文件 ./configure --with-php-config=/usr/local/php-8.3/bin/php-config --with-python-dir=/home/www/anaconda3/envs/tinywan-python310 --with-python-version=3.10参数说明 --with-php-config PHP配置文件 --with-python-dir Python安装目录 --with-python-version Python版本号(只能使用次版本好,如:3.10.15,则填写3.10) 编译安装 make -j4 sudo make installphp.ini 扩展添加 安装成功后,修改 php.ini ,加入 extension=phpy.so vim /usr/local/php-8.3/etc/php.ini // 添加 extension=phpy.so执行 php -m 检查是否成功加载扩展。 $ php -m |grep phpy phpy使用 案例 os.php <?php function main() { $m = PyCore::import("os"); var_dump($m instanceof PyObject); $rs = $m->uname(); echo $rs; echo $rs->version; } main()查看当前操作系统版本执行结果 /phpy/examples$ /usr/local/php-8.3/bin/php os.php bool(true) posix.uname_result(sysname='Linux', nodename='iZbp1cqx6cq0t2gpl995gqZ', release='4.15.0-137-generic', version='#141-Ubuntu SMP Fri Feb 19 13:46:27 UTC 2021', machine='x86_64')#141-Ubuntu SMP Fri Feb 19 13:46:27 UTC 2021(tinywan-python310)其他 gcc 版本升级 ubuntu18.04的Gcc7.5.0升级到9.4.01、添加Ubuntu的测试工具链 (Toolchain) PPA。这个PPA包含了最新版本的GCC,包括GCC 9: sudo add-apt-repository ppa:ubuntu-toolchain-r/test2、更新你的包列表: sudo apt-get update sudo apt-get upgrade3、查看gcc所有版本 sudo apt-cache search gcc4、安装GCC-9: sudo apt install gcc-95、为了让你的系统默认使用GCC-9,你需要更新你的update-alternatives。首先,安装GCC-9为一个可选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90这个命令告诉 update-alternatives 系统 GCC-9 是一个可选项,并给它一个优先级 90 。优先级最高的版本将成为默认版本。如果安装成功会是这样的: gcc -v gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~18.04)