Python 端口号未显示在headers.host中

Python 端口号未显示在headers.host中,python,request,port,Python,Request,Port,我正在从前端发出HTTP请求,我可以在开发工具(例如xyz.com:1234)的请求头的主机字段中看到端口号。但使用python的请求模块,主机只显示xyz.com。 如何获取端口号?当您使用请求库发出请求时,它不需要创建和添加主机头,但是如果您需要,您可以添加主机头:如果使用上面的示例,只需提供--例如头={'Host':'xyz.com:1234'} 从URL解析端口号,一种手动方法 然而,您的问题似乎更多地与解析请求的端口号有关,因此,一个示例应该为您澄清: 从urllib.parse导入

我正在从前端发出HTTP请求,我可以在开发工具(例如xyz.com:1234)的请求头的主机字段中看到端口号。但使用python的请求模块,主机只显示xyz.com。
如何获取端口号?

当您使用
请求库发出请求时,它不需要创建和添加
主机
头,但是如果您需要,您可以添加
主机
头:如果使用上面的示例,只需提供--例如
头={'Host':'xyz.com:1234'}

从URL解析端口号,一种手动方法 然而,您的问题似乎更多地与解析请求的端口号有关,因此,一个示例应该为您澄清:

从urllib.parse导入urlparse
导入请求
def get_端口(url:str)->int:
架构_端口={'http':80,'https':443}
解析的url=URLPRASE(url)
如果已解析_url.port:
返回解析的_url.port
返回schema_ports.get(已解析的_url.scheme,无)
端口=(
获取端口(请求。获取端口)http://localhost:8001“).request.url),
获取端口(请求。获取端口)http://google.com“).request.url),
获取端口(请求。获取端口)https://google.com)。请求。url)
)
打印(端口)#(8001、80、443)
在本例中,有三个HTTP GET请求与
请求
库。尽管在这个精心设计的示例中,您已经看到了请求URL,但如果您正在从通用的
requests.models.Response
对象处理解决方案,则可以从
request.URL
属性获取请求URL。然后,您需要意识到,在没有明确指定端口的情况下,您将需要推断出一个合理的默认值(因为没有明确的
端口
)。上面的
get_port
定义给出了两种常见方案(HTTP和HTTPS)的示例

有关更多信息,请阅读Python的标准库模块

更自动化的方法,依靠标准库 上面描述的手动方法描述了如何从一般意义上考虑这个问题,但它不容易扩展到可能存在的许多常见方案(
ssh
gopher
,等等)

在POSIX系统上,
/etc/services
文件维护公共服务方案到端口/协议和可选描述的映射,例如

http             80/udp     www www-http # World Wide Web HTTP
http             80/tcp     www www-http # World Wide Web HTTP
Python的
socket
库中的有一种方法可以利用这种类型的映射:

>>> socket.getservbyname('https')
443
>>> socket.getservbyname('http')
80
这样,我们可以改进我的第一个示例,以避免手动指定公共方案的映射:

导入套接字
从urllib.parse导入urlparse
导入请求
def get_端口(url:str)->int:
解析的url=URLPRASE(url)
如果已解析_url.port:
返回解析的_url.port
尝试:
返回socket.getservbyname(已解析的url.scheme)
除操作错误外:
一无所获
端口=(
获取端口(请求。获取端口)http://localhost:8001“).request.url),
获取端口(请求。获取端口)http://google.com“).request.url),
获取端口(请求。获取端口)https://google.com)。请求。url)
)
打印(端口)#(8001、80、443)