Python 3 - 使用urllib.request的POST请求返回HTML数据

3 投票
1 回答
1274 浏览
提问于 2025-04-20 13:59

我正在尝试用POST请求访问一个网站的API,但它返回的是HTML页面,我不知道为什么。

import urllib.request
url = 'https://matchbook.com'
loginReq = '"method": "/bpapi/rest/security/session", "params":{"username": "xxxxx","password": "xxxxx"}'

req = urllib.request.Request(url, loginReq.encode('utf-8'))
response = urllib.request.urlopen(req).read()
print (response)    

这个返回的内容是一段HTML,基本上是在告诉我我使用的是不支持的Internet Explorer版本,建议我升级到更新的版本。

我花了一些时间在网上查找,发现关于Python 3中的get/post/put/delete请求的详细信息很难找到,大部分有用的信息都是关于Python 2的“requests”模块的。换成Python 2会不会更容易呢?

这是他们在文档中提供的信息:

资源网址:
网址:matchbook.com
URN:/bpapi/rest/security/session

示例请求:
POST /security/session
{
"username": "j_henry",
"password": "**"
}

示例响应:
{
"session-token": "1418_1234567890",
"user-id": 1418,
"account": { // 和GET /account API的响应相同。
...
}

1 个回答

0

问题几乎可以肯定是你发送给API的数据不正确,也就是你的loginReq变量出了问题。

你需要使用curl或者类似的工具,来搞清楚到底需要发送哪些参数和对应的值。可以参考下面的方式:

curl --data "method:/bpapi/rest/security/session&params={username=j_henry&password=**}" https://www.matchbook.com

一旦你把请求弄明白了,就可以开始考虑怎么编程实现它了。

撰写回答