Search code examples
pythonpython-3.x

Python http.client json request and response. How?


I have the following code that I'd like to update to Python 3.x The required libraries would change to http.client and json.

I can't seem to understand how to do it. Can you please help?

import urllib2
import json


data = {"text": "Hello world github/linguist#1 **cool**, and #1!"}
json_data = json.dumps(data)

req = urllib2.Request("https://api.github.com/markdown")
result = urllib2.urlopen(req, json_data)

print '\n'.join(result.readlines())

Solution

  • import http.client
    import json
    
    connection = http.client.HTTPSConnection('api.github.com')
    
    headers = {'Content-type': 'application/json'}
    
    foo = {'text': 'Hello world github/linguist#1 **cool**, and #1!'}
    json_foo = json.dumps(foo)
    
    connection.request('POST', '/markdown', json_foo, headers)
    
    response = connection.getresponse()
    print(response.read().decode())
    

    I will walk you through it. First you'll need to create a TCP connection that you will use to communicate with the remote server.

    >>> connection = http.client.HTTPSConnection('api.github.com')
    

    -- http.client.HTTPSConnection()

    Thẹ̣n you will need to specify the request headers.

    >>> headers = {'Content-type': 'application/json'}
    

    In this case we're saying that the request body is of the type application/json.

    Next we will generate the json data from a python dict()

    >>> foo = {'text': 'Hello world github/linguist#1 **cool**, and #1!'}
    >>> json_foo = json.dumps(foo)
    

    Then we send an HTTP request to over the HTTPS connection.

    >>> connection.request('POST', '/markdown', json_foo, headers)
    

    Get the response and read it.

    >>> response = connection.getresponse()
    >>> response.read()
    b'<p>Hello world github/linguist#1 <strong>cool</strong>, and #1!</p>'