Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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()) 
like image 232
suchislife Avatar asked Aug 01 '12 16:08

suchislife


2 Answers

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>' 
like image 61
joar Avatar answered Sep 21 '22 13:09

joar


To make your code Python 3 compatible it is enough to change import statements and encode/decode data assuming utf-8 everywhere:

import json from urllib.request import urlopen  data = {"text": "Hello world github/linguist№1 **cool**, and #1!"} response = urlopen("https://api.github.com/markdown", json.dumps(data).encode()) print(response.read().decode()) 

See another https post example.

like image 37
jfs Avatar answered Sep 22 '22 13:09

jfs