【问题标题】:Python 3, urllib POST submitPython 3,urllib POST 提交
【发布时间】:2011-08-16 01:44:57
【问题描述】:

我想编写一个 Python 脚本来自动登录我的宽带使用计量器帐户。我以前从未做过 POST 提交,但遇到了一些麻烦。

import urllib.request, urllib.parse, urllib.error
import socket

try:
    details = urllib.parse.urlencode({ 'IDToken1': 'USERNAME', 'IDToken2': 'PASSWORD' })
    url = urllib.request.Request('https://login1.telecom.co.nz/distauth/UI/Login?realm=XtraUsers&goto=https%3A%2F%2Fwww.telecom.co.nz%3A443%2Fjetstreamum%2FxtraSum%3Flink%3Drdt', details)
    url.add_header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13")

    responseData = urllib.request.urlopen(url).read().decode('utf8', 'ignore')
    responseFail = False

except urllib.error.HTTPError as e:
    responseData = e.read().decode('utf8', 'ignore')
    responseFail = False

except urllib.error.URLError:
    responseFail = True

except socket.error:
    responseFail = True

except socket.timeout:
    responseFail = True

except UnicodeEncodeError:
    print("[x]  Encoding Error")
    responseFail = True

print(responseData)

从我得出的 HTML 中,IDToken1 是用户名 ID,IDToken2 是密码 ID。

这是我的问题:

  • 当我输入正确的用户名和密码时,登录页面会加载,但是:

  • 当我输入错误的用户名或密码时,我会看到一个页面显示:

    此服务器遇到了一个内部错误,导致它无法满足您的请求。最可能的原因是配置错误。请让管理员在服务器的错误日志中查找消息。

【问题讨论】:

  • 嗯,如果没有看到您正在使用的实际页面,这非常困难......也许您应该使用 Chrome 开发工具或像 Wireshark 这样的数据包嗅探器检查浏览器实际发送的内容?跨度>

标签: python post python-3.x urllib


【解决方案1】:

这可能是设计使然。如果您在浏览器中执行此操作会发生什么?它使用正确的数据这一事实意味着您做对了。

【讨论】:

    【解决方案2】:
    details = urllib.parse.urlencode({'IDToken1': 'USERNAME', 'IDToken2': 'PASSWORD'})
    

    添加以下行:

    details = details.encode('UTF-8')
    

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 2016-03-11
      • 2016-02-14
      • 2012-09-25
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2017-12-29
      相关资源
      最近更新 更多