我的目标是能够从受密码保护的页面解析HTML/XML数据,然后基于该数据(时间戳),向另一个设备发送XML命令。我要访问的页面是由IP设备生成的Web服务器。
如果有其他编程语言更容易实现这个目标,请告诉我。我几乎没有编程经验(只学过一门C编程课)。
我尝试使用请求进行基本和摘要身份验证。但我仍无法得到认证,这阻止了我进一步操作。
以下是我的尝试:
如果有其他编程语言更容易实现这个目标,请告诉我。我几乎没有编程经验(只学过一门C编程课)。
我尝试使用请求进行基本和摘要身份验证。但我仍无法得到认证,这阻止了我进一步操作。
以下是我的尝试:
import requests
from requests.auth import HTTPDigestAuth
url='http://myUsername:myPassword@example.com/cgi/metadata.cgi?template=html'
r = requests.get(url, auth=HTTPDigestAuth('myUsername', 'myPassword'))
r.status_code
print(r.headers)
print(r.status_code)
输出:
401
CaseInsensitiveDict({'Content-Length': '0', 'WWW-Authenticate': 'Digest realm="the realm of device", nonce="23cde09025c589f05f153b81306928c8", qop="auth"', 'Server': 'Device server name'})
我还尝试了使用Requests库的BasicAuth
方法,但输出结果相同。我已经尝试了将user:pass@
包含在URL中和不包含在URL中两种方式。虽然当我在浏览器中输入这个URL时它可以正常工作。
我原以为Requests库可以处理Digest/BasicAuth
的头部数据,但也许我还需要包含头部信息吗?
我使用了Live HTTP Headers(火狐浏览器插件)并获得了以下信息:
GET /cgi/metadata.cgi?template=html
HTTP/1.1
Host: [Device IP]
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive
HTTP/1.1 401 Unauthorized WWW-Authenticate: Digest realm="Device Realm", nonce="a2333eec4cce86f78016343c48382d21",
qop="auth"
Server: Device Server Content-Length: 0
request.get()
(第二个不发送任何身份验证信息)吗?请提供你实际尝试过的代码(你可以将设备IP替换为example.com
,使用等效符号集更改用户名/密码(如果你的密码使用空格,则包括它,如果其中包含"
则包括引号等)。 - jfs