Sending POST Data with HTTPX in Python

Feb 5, 2024 ยท 3 min read

HTTPX is a popular Python library for making HTTP requests. One common task is sending POST data to APIs or web servers. This guide will explain how to properly structure and send POST data with HTTPX.

Overview of POST Requests

A POST request is used when you want to send data to a server for processing, like submitting a web form. The POST data is included in the request body. The server can then access and process this data in some way.

Common examples of POST requests:

  • Submitting a login form
  • Creating a new resource (user, blog post, etc)
  • Running a search query
  • Triggering an action on the server
  • Structuring the POST Data

    With HTTPX, the POST data should be structured as a dictionary that maps data keys to values. For example:

    data = {
      'name': 'John Doe',
      'email': '',  
      'age': 30

    The keys are the field names and the values are the user-submitted data. Make sure the keys match what the API or web server is expecting.

    For more complex nested data, you may want to use JSON:

    import json
    data = json.dumps({
      'user': {
        'name': 'John Doe',
        'email': '',  
      'settings': {
        'notifications': True 

    Sending the POST Request

    To make a POST request with HTTPX, use the post() method. Pass the URL and the data dictionary:

    import httpx
    url = ''
    data = {
      'name': 'John Doe',
      'email': ''
    r =, data=data)

    That's the basic pattern. HTTPX will encode the data appropriately and include it in the body of the POST request.

    You can also pass JSON directly:

    data = {
      'name': 'John Doe',
      # ...
    r =, json=data) 

    And if you have the data as a string, you can pass that to the data parameter directly.

    Handling the Response

    After making the request, you can access the Response object. This contains properties like status_code, headers, and text:


    You can also treat it as a context manager to automatically call .close():

    with, data=data) as r:

    This can be useful for easily submitting forms or sending data to APIs. The server should process and validate the POST data accordingly.

    Some key points to remember:

  • Structure data as a dictionary
  • Use JSON for complex nested data
  • Pass data to post() via data or json parameters
  • Handle response and check status codes
  • POST requests are fundamental for web development. HTTPX makes it simple to properly structure and send POST data to servers.

    Browse by tags:

    Browse by language:

    The easiest way to do Web Scraping

    Get HTML from any page with a simple API call. We handle proxy rotation, browser identities, automatic retries, CAPTCHAs, JavaScript rendering, etc automatically for you

    Try ProxiesAPI for free

    curl ""

    <!doctype html>
        <title>Example Domain</title>
        <meta charset="utf-8" />
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />


    Don't leave just yet!

    Enter your email below to claim your free API key: