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