[Tutor] [Help] urllib.error.HTTPError: HTTP Error 400: Bad Request
Peter Otten
__peter__ at web.de
Tue Feb 13 08:47:56 EST 2018
cm wrote:
> Dear tutors,
>
> I have written below function to open the profanity check url and then
> to check for profanity in some text. When I go to the url
> http://www.wdylike.appspot.com/?q= and type in the same text, it works
> fine.
>
> I am using Microsoft OS X and Python 3.5.2 Interpreter with Pycharm
> Community Edition.
>
> ---
> import urllib.request
>
> def check_profanity(some_text):
> # check text for a curse word
> connection =
> urllib.request.urlopen("http://www.wdylike.appspot.com/?q="+some_text)
> output = connection.read()
> print(output)
> connection.close()
>
> check_profanity(some_text="I gave it a good shot")
> ---
>
> Error message:
> Traceback (most recent call last):
> File
> "C:/Users/Administrator/PycharmProjects/Udacity/profanity_check.py",
> line 29, in <module>
> check_profanity(some_text="I gave it a good shot")
> File
> "C:/Users/Administrator/PycharmProjects/Udacity/profanity_check.py",
> line 15, in check_profanity
> connection =
> urllib.request.urlopen("http://www.wdylike.appspot.com/?q="+some_text)
> File "C:\Program Files\Anaconda3\lib\urllib\request.py", line 163, in
> urlopen
> return opener.open(url, data, timeout)
> File "C:\Program Files\Anaconda3\lib\urllib\request.py", line 472, in
> open
> response = meth(req, response)
> File "C:\Program Files\Anaconda3\lib\urllib\request.py", line 582,
> in http_response
> 'http', request, response, code, msg, hdrs)
> File "C:\Program Files\Anaconda3\lib\urllib\request.py", line 510, in
> error
> return self._call_chain(*args)
> File "C:\Program Files\Anaconda3\lib\urllib\request.py", line 444,
> in _call_chain
> result = func(*args)
> File "C:\Program Files\Anaconda3\lib\urllib\request.py", line 590,
> in http_error_default
> raise HTTPError(req.full_url, code, msg, hdrs, fp)
> urllib.error.HTTPError: HTTP Error 400: Bad Request
>
> Process finished with exit code 1
>
> ---
> However when I run the code it just says Bad Request. I tried to read
> into the traceback message but it refers not only to my file but the
> urllib function itself too and I can't understand.
Spaces aren't allowed in the url:
>>> c = rq.urlopen("http://www.wdylike.appspot.com/?q=nice try")
[...]
urllib.error.HTTPError: HTTP Error 400: Bad Request
Once you escape the ' ':
>>> c = rq.urlopen("http://www.wdylike.appspot.com/?q=nice+try")
>>> c.read()
b'false'
Have a look at the first example at
https://docs.python.org/dev/library/urllib.request.html#urllib-examples
for a more general solution.
More information about the Tutor
mailing list