# Python, create a network request

> Learn how to make a network request in Python with the built-in urllib package, using request.urlopen() to fetch a URL and parse the response as JSON.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2021-01-31 | Topics: [Python](https://flaviocopes.com/tags/python/) | Canonical: https://flaviocopes.com/python-create-network-request/

[Python](https://flaviocopes.com/python-introduction/) offers us the `urllib` standard library package to create network requests.

Create a request using:

```python
from urllib import request
url = 'https://dog.ceo/api/breeds/list/all'

response = request.urlopen(url)
content = response.read()

print(content)
```

You can also use the `with` statement to simplify

```python
from urllib import request
url = 'https://dog.ceo/api/breeds/list/all'

with request.urlopen(url) as response:
   content = response.read()

print(content)
```

The response is a sequence of bytes, as you will notice because the response is wrapped in a `b''` string:

```
b'{"message":{"affenpinscher":[],"african":[],"airedale":[],"akita":[],"appenzeller":[],"australian":["shepherd"],"basenji":[],"beagle":[],"bluetick":[],"borzoi":[],"bouvier":[],"boxer":[],"brabancon":[],"briard":[],"buhund":["norwegian"],"bulldog":["boston","english","french"]},"status":"success"}'
```

Decode it to a UTF-8 encoded string using `content.decode('utf-8')`

This gets the HTML content from my website flavicopes.com:

```python
from urllib import request

url = 'https://flaviocopes.com'

with request.urlopen(url) as response:
   content = response.read().decode('utf-8')

print(content)
```

You can parse the response as [JSON](https://flaviocopes.com/json/), using the `json` standard library module:

```python
from urllib import request
import json

url = 'https://dog.ceo/api/breeds/list/all'

with request.urlopen(url) as response:
   content = response.read()

data = json.loads(content)
print(data['status'])
```

If you need to specify query parameters, use the `urllib.parse()` method to build the query string:

```python
from urllib import request, parse
url = 'https://api.thecatapi.com/v1/images/search'

parms = {
    'limit' : 5,
    'page' : 1,
    'order' : 'Desc'
}

querystring = parse.urlencode(parms)

with request.urlopen(url + '?' + querystring) as response:
   content = response.read().decode('utf-8')

print(content)
```

This is the built-in `urllib` package.

For convenience purposes, you might want to use the `requests` package, not part of the [Python standard library](https://flaviocopes.com/python-standard-library/) but quite popular.
