Python 3,urllib POST 提交

标签 python post python-3.x urllib

我想编写一个 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。

这是我的问题:

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

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

    This server has encountered an internal error which prevents it from fulfilling your request. The most likely cause is a misconfiguration. Please ask the administrator to look for messages in the server's error log.

最佳答案

details = urllib.parse.urlencode({'IDToken1': 'USERNAME', 'IDToken2': 'PASSWORD'})

添加以下行:

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

关于Python 3,urllib POST 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5842096/

相关文章:

python - webelement.text 不起作用(浏览器 = webdriver.Firefox)

php - 从 $_POST 中的 json 中读取关联数组

python-3.x - 使用 predict_signature_def 保存 keras 多输入模型的签名

python - 检查键是否在字典中并在同一个 "if"中获取它的值是否安全?

Python:Selenium 在表单的文本框中写入

python - 间隔一段时间后用opencv拍摄视频

python - CuPy 内存不足

php - Android 将 Base64 字符串发布到 PHP

jquery - 保护 jquery ajax 调用的安全

python - 创建一个以另一个 DataFrame 为条件的 Pandas DataFrame