0

I was trying to read an image from the internet, but I keep on getting HTTP Error 403: Forbidden. I looked at the Problem HTTP Error 403 page, but this page hasn't helped me. Here is my code:

import cv2
import urllib.request`
import numpy as np

req = urllib.request.urlopen('https://media.discordapp.net/attachments/862441786333200394/862449591642488882/pokemon.png?width=473&height=473')
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
img = cv2.imdecode(arr, -1) # 'Load it as it is'

cv2.imshow(img)

Here is the error that I get:

Traceback (most recent call last):
  File "C:\Users\User1\AppData\Local\Programs\Python\Python39\Auto Typer\AT TEST2.py", line 15, in <module>
    req = urllib.request.urlopen('https://media.discordapp.net/attachments/862441786333200394/862449591642488882/pokemon.png?width=473&height=473')
  File "C:\Users\User1\AppData\Local\Programs\Python\Python39\lib\urllib\request.py", line 214, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\User1\AppData\Local\Programs\Python\Python39\lib\urllib\request.py", line 523, in open
    response = meth(req, response)
  File "C:\Users\User1\AppData\Local\Programs\Python\Python39\lib\urllib\request.py", line 632, in http_response
    response = self.parent.error(
  File "C:\Users\User1\AppData\Local\Programs\Python\Python39\lib\urllib\request.py", line 561, in error
    return self._call_chain(*args)
  File "C:\Users\User1\AppData\Local\Programs\Python\Python39\lib\urllib\request.py", line 494, in _call_chain
    result = func(*args)
  File "C:\Users\User1\AppData\Local\Programs\Python\Python39\lib\urllib\request.py", line 641, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
  • 4
    Does this answer your question? [Problem HTTP error 403 in Python 3 Web Scraping](https://stackoverflow.com/questions/16627227/problem-http-error-403-in-python-3-web-scraping) – Edeki Okoh Jul 07 '21 at 22:50

1 Answers1

1

Add the User-Agent header to your request:

req = urllib.request.urlopen('https://media.discordapp.net/attachments/862441786333200394/862449591642488882/pokemon.png?width=473&height=473', headers={'User-Agent': 'Mozilla/5.0'})

It presumably knows you're a bot so blocking you for security.

Luke
  • 226
  • 1
  • 10