Using the following code I received an error:
TypeError: POST data should be bytes or an iterable of bytes. It cannot be str
Second concern, I am not sure if I specified my user-agent correctly, here’s my user-agent in whole: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4. I gave my best shot as I defined the user-agent in the script.
import urllib.parse
import urllib.request
url = 'http://getliberty.org/contact-us/'
user_agent = 'Mozilla/5.0 (compatible; Chrome/22.0.1229.94; Windows NT)'
values = {'Your Name' : 'Horatio',
'Your Email' : '6765Minus4181@gmail.com',
'Subject' : 'Hello',
'Your Message' : 'Cheers'}
headers = {'User-Agent': user_agent }
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
the_page = response.read()
I am aware of this similar question, TypeError: POST data should be bytes or an iterable of bytes. It cannot be str, but am too new for the answer to be much help.
The urllib docs say for
urllib.request.Request(url, data ...):(emphasis mine)
So you have a string that looks right, what you need is that string encoded into bytes. And you choose the encoding.
in the above line: encoding can be ‘utf-8’ or ‘ascii’ or a bunch of other things. Pick whichever one the server expects.
So you end up with something that looks like: