How can I get position and type of Handle in bezier curve?
based on bezier spline point documentation and this useful blog
you can get the position of handle by handle_left and handle_right
Handl positions
handle_left
handle_right
you can get handle type by handle_left_type and handle_right_type
Handle types
 enum in [‘FREE’, ‘VECTOR’, ‘ALIGNED’, ‘AUTO’], default ‘FREE’

so you can get them easily
import bpy

# Type of the first handle        
print(bpy.data.curves['BezierCurve'].splines[0].bezier_points[0].handle_left_type)

# Type of the second handle
print(bpy.data.curves['BezierCurve'].splines[0].bezier_points[0].handle_right_type)

# Coordinates of the first handle 
print(bpy.data.curves['BezierCurve'].splines[0].bezier_points[0].handle_left)

# Coordinates of the second handle
print(bpy.data.curves['BezierCurve'].splines[0].bezier_points[0].handle_right)