python打开网页链接_怎么用python打开浏览器

python打开网页链接_怎么用python打开浏览器以下为一个最简单的HTTP服务器,在浏览器中输入地址后,就能够访问到通目录下的HTML文件,import socket”””TCP 的服务端1,socket 创建socket2.bind 绑定IP和端口3.listen 处于监听状态4.accept 接进来客户端的连接5.recv/send 接受或者发送信息6.close 关闭”””def tcp_creat_socket(): tcp_ser = socket.socket(family=socket.AF_INET, t

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

以下为一个最简单的HTTP服务器,在浏览器中输入地址后,就能够访问到通目录下的HTML文件,
实现效果:
在这里插入图片描述
在这里插入图片描述

import socket
""" TCP 的服务端 1,socket 创建socket 2.bind 绑定IP和端口 3.listen 处于监听状态 4.accept 接进来客户端的连接 5.recv/send 接受或者发送信息 6.close 关闭 """
def tcp_creat_socket():
tcp_ser = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
return tcp_ser
def tcp_bind_listern_info(tcp_socket):
SER_IP = "127.0.0.1"
# SER_PORT = int(input("服务器绑定的端口:"))
SER_PORT = 7080
SER_INFO = (SER_IP, SER_PORT)
tcp_socket.bind(SER_INFO)
LISTEN_NUM = 10
tcp_socket.listen(LISTEN_NUM)
return SER_INFO
def tcp_accept(tcp_socket,ser_info):
# accept 1默认会阻塞,2并返回一个新的套接字用于和接进来的客户端进行数据传输,3并记录客户端的信息,为用户进行服务
print("服务器的IP:%s,端口:%d,正在等待新的客户端的到来" % (ser_info[0], ser_info[1]))
tcp_ser_new_socket, client_addr = tcp_socket.accept()
print("客户端已经到来,信息如下:%s" % str(client_addr))
return tcp_ser_new_socket
def tcp_recv_message(tcp_socket):
# recv 返回值为空时,则客户端调用了close
tcp_ser_recv_info = tcp_socket.recv(1024)
if "exit" == tcp_ser_recv_info or None == tcp_ser_recv_info:
print("recv_info error")
# GET / HTTP/1.1
# Host: www.baidu.com
# Connection: keep-alive
# sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
# sec-ch-ua-mobile: ?0
print(">"*120)
print("服务端接收:%s" % tcp_ser_recv_info.decode("utf-8"))
def tcp_send_message(tcp_socket):
# send_info = str(input("输入服务端发送的信息:"))
header = "HTTP/1.1 200 OK\r\n"  # 相应头部
respone = "\r\n"  # 空行
http_headr = header + respone
f = open("./pass.html", "rb")  # 二进制文件
html_file = f.read()
f.close()
http_body = html_file
tcp_socket.send(http_headr.encode("utf-8"))
tcp_socket.send(http_body)
tcp_socket.close()
def tcp_close(tcp_socket):
tcp_socket.close()
def CC_server():
# 创建
tcp_ser =tcp_creat_socket()
# bind and listen
ser_info = tcp_bind_listern_info(tcp_socket=tcp_ser)
while True:  # 循环为多个客户端服务,一直处于监听状态
new_socket = tcp_accept(tcp_socket=tcp_ser, ser_info=ser_info)
while True:  # 循环为同一个用户服务多次
# recv 返回值为空时,则客户端调用了close
tcp_recv_message(tcp_socket=new_socket)
# send
tcp_send_message(tcp_socket=new_socket)
break
# close 关闭发送数据的客户端的连接
tcp_close(tcp_socket=new_socket)
# close
tcp_close(tcp_socket=tcp_ser)
if __name__ == "__main__":
CC_server()
``
效果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/37d77e5eda3f4ce885d3720339e305c3.png#pic_center)
后面部分是扩展部分,能够实现从HTTP服务器的指定网页信息,在浏览器中需要加入需要获取的网页的名称
```python
import socket
import re
""" TCP 的服务端 1,socket 创建socket 2.bind 绑定IP和端口 3.listen 处于监听状态 4.accept 接进来客户端的连接 5.recv/send 接受或者发送信息 6.close 关闭 """
def tcp_creat_socket():
tcp_ser = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
return tcp_ser
def tcp_bind_listern_info(tcp_socket):
SER_IP = "127.0.0.1"
# SER_PORT = int(input("服务器绑定的端口:"))
SER_PORT = 7080
SER_INFO = (SER_IP, SER_PORT)
tcp_socket.bind(SER_INFO)
LISTEN_NUM = 10
tcp_socket.listen(LISTEN_NUM)
return SER_INFO
def tcp_accept(tcp_socket,ser_info):
# accept 1默认会阻塞,2并返回一个新的套接字用于和接进来的客户端进行数据传输,3并记录客户端的信息,为用户进行服务
print("服务器的IP:%s,端口:%d,正在等待新的客户端的到来" % (ser_info[0], ser_info[1]))
tcp_ser_new_socket, client_addr = tcp_socket.accept()
print("客户端已经到来,信息如下:%s" % str(client_addr))
return tcp_ser_new_socket
def tcp_recv_message(tcp_socket):
# recv 返回值为空时,则客户端调用了close
tcp_ser_recv_info = tcp_socket.recv(1024)
if "exit" == tcp_ser_recv_info or None == tcp_ser_recv_info:
print("recv_info error")
# GET / HTTP/1.1
# Host: www.baidu.com
# Connection: keep-alive
# sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
# sec-ch-ua-mobile: ?0
print(">"*120)
print("服务端接收:%s" % tcp_ser_recv_info.decode("utf-8").splitlines()[0])
ret = re.match(r"[^/]+(/[^ ]*)", tcp_ser_recv_info.decode("utf-8").splitlines()[0])
if ret:
http_page_name = ret.group(1)
return http_page_name
def tcp_send_message(tcp_socket, page_name):
# send_info = str(input("输入服务端发送的信息:"))
if "/" == page_name:
page_name = "index"  # 默认的页面
try:
f = open(f"./{ 
page_name}.html", "rb")   # 二进制文件
html_file = f.read()
f.close()
except:
header = "HTTP/1.1 404 NOT FOUND\r\n"  # 相应头部
respone = "\r\n"  # 空行
http_headr = header + respone + f"{ 
page_name} not fount ,please again"
tcp_socket.send(http_headr.encode("utf-8"))
else:
header = "HTTP/1.1 200 OK\r\n"  # 相应头部
respone = "\r\n"  # 空行
http_headr = header + respone
http_body = html_file
tcp_socket.send(http_headr.encode("utf-8"))
tcp_socket.send(http_body)
tcp_socket.close()
def tcp_close(tcp_socket):
tcp_socket.close()
def CC_server():
# 创建
tcp_ser =tcp_creat_socket()
# bind and listen
ser_info = tcp_bind_listern_info(tcp_socket=tcp_ser)
while True:  # 循环为多个客户端服务,一直处于监听状态
new_socket = tcp_accept(tcp_socket=tcp_ser, ser_info=ser_info)
while True:  # 循环为同一个用户服务多次
# recv 返回值为空时,则客户端调用了close
page_name = tcp_recv_message(tcp_socket=new_socket)
# send
tcp_send_message(tcp_socket=new_socket, page_name=page_name)
break
# close 关闭发送数据的客户端的连接
tcp_close(tcp_socket=new_socket)
# close
tcp_close(tcp_socket=tcp_ser)
if __name__ == "__main__":
CC_server()

在这里插入图片描述
例如该PY文件下面存在一个3.html文件,只需要在浏览器中输入http://127.0.0.1:7080/3 就能够看到服务端返回的数据,并将html中的内容显示在浏览器上,

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168451.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • webpack开发环境和生产环境_第二环境问题可以分为

    webpack开发环境和生产环境_第二环境问题可以分为前言如果我们需要使用webpack,就需要依赖node环境nvmnodenpmwebpack@cliwebpacknvm安装nvm是一个用来管理node版本的工具。我们之所以需要使用n

  • [C++]-日志记录库SPDLog简介[通俗易懂]

    [C++]-日志记录库SPDLog简介[通俗易懂]文章目录spdlog库日志记录槽sink日志记录器logger输出格式pattern对齐方式截断字符串格式化fmtFormatSpecificationspdlog使用异常处理logger基础用法stdout日志文件日志基本文件循环文件每日文件示例spdlog是一款开源的、快速的日志库。spdlog库spdlog是基于C++11实现的一款纯头文件的日志管理库(git地址:https://github.com/gabime/spdlog,API说明:https://spdlog.docsforge.c

  • kfold交叉验证k越大_内部交叉验证

    kfold交叉验证k越大_内部交叉验证交叉验证的原理放在后面,先看函数。设X是一个9*3的矩阵,即9个样本,3个特征,y是一个9维列向量,即9个标签。现在我要进行3折交叉验证。执行kFold=KFold(n_splits=3):其中KFold是一个类,n_split=3表示,当执行KFold的split函数后,数据集被分成三份,两份训练集和一份验证集。执行index=kFold.split(X=X):index是一个生成器…

  • EasySwoole的入门学习

    EasySwoole的入门学习EasySwoole的入门学习官网地址:https://www.easyswoole.com/一、安装easyswoole:(1)建立安装目录:(2)使用composer下载easyswool

  • 关于AjaxPro用法[通俗易懂]

    关于AjaxPro用法[通俗易懂]特点是前后台传输数据特别方便,可以直接跟后台方法进行访问,中间用数据JASON数据传输这一切她都已经帮你做了。一、配置AjaxPro:1.下载AjaxPro.2.dll并添加到工程里,如图:在web.config中添加注册信息在后台Page_Load注册下,如下图:这样就配置好了。二、后台代码:[AjaxPro.AjaxMethod]加上此标记,前台可以直接调用此方法三、

  • 自动化测试平台(八):列表组件公共化封装和用例项目管理功能开发

    自动化测试平台(八):列表组件公共化封装和用例项目管理功能开发上一章我们完成了整个用户管理模块的功能,能够正确的增、删、改、查用户。但其中有很多判断实际上是其他类似的模块也会有的,例如:1.创建用户后回到首页刷新列表;2.删除次页最后一条数据,回到前一页刷新列表;3.查询条件的格式化;—难道我们每写一个类似的模块,都要去写一遍这些重复的逻辑代码吗?显然是没必要的,所以我们需要将其抽离成公共列表组件提供给其他模块使用,避免大量的做重复的事情,并让代码更容易维护。本章还将完成用例项目管理功能,它主要用于管理不同类型(API、UI),不同项目

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号