Skip to main content
 首页 » 编程设计

Python 3.x : urllib. 请求错误

2025年05月04日18daizhj

我的代码:

import urllib.request, urllib.parse, urllib.error 
 
def login(): 
     url = 'http://rsbot.lt/news.php' 
     values = {'user_name' : 'Name', 
          'user_pass' : 'Password' } 
 
     data = urllib.parse.urlencode(values) 
     req = urllib.request.Request(url, data) 
     response = urllib.request.urlopen(req) 
     return response.read() 
 
login() 

我的错误:

 Traceback (most recent call last): 
  File "C:\Users\Myrez\Desktop\test.py", line 13, in <module> 
login() 
 File "C:\Users\Myrez\Desktop\test.py", line 10, in login 
response = urllib.request.urlopen(req) 
 File "C:\Python32\lib\urllib\request.py", line 138, in urlopen 
return opener.open(url, data, timeout) 
 File "C:\Python32\lib\urllib\request.py", line 367, in open 
req = meth(req) 
 File "C:\Python32\lib\urllib\request.py", line 1066, in do_request_ 
raise TypeError("POST data should be bytes" 
TypeError: POST data should be bytes or an iterable of bytes. It cannot be str. 

我尝试过编码,但没有帮助。

请您参考如下方法:

错误告诉你你做错了什么:

“TypeError:POST 数据应该是字节或可迭代的字节。它不能是 str。”

您应该为 POST 数据使用 bytes 类型,而不是 str 类型。 如果您通过 type(data) 查看您的数据类型,您会看到它是一个 str,但它应该是一个字节。

如果您随后查看 Python documentation on how to use urllib ,您将看到如何发布表单的示例:

>>> import urllib.request 
>>> import urllib.parse 
>>> params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
>>> params = params.encode('utf-8') 
>>> f = urllib.request.urlopen("http://www.musi-cal.com/cgi-bin/query", params) 

它告诉您如何将数据(这里称为参数)转换为字节而不是 str。