# How github_bot.py Authenticates to the GitHub API Using Basic Authentication

> Learn how github_bot.py authenticates to GitHub API using Basic Authentication with the requests library. Discover how it generates the Authorization Basic header.

- Repository: [削微寒/HelloGitHub](https://github.com/521xueweihan/HelloGitHub)
- Tags: how-to-guide
- Published: 2026-02-25

---

**The [`github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/github_bot.py) script in the HelloGitHub repository authenticates to the GitHub API using HTTP Basic Authentication via the `requests` library's `auth` parameter, passing a username and password tuple to generate an `Authorization: Basic` header.**

The HelloGitHub project automates the collection of trending GitHub repositories through a Python bot that queries the GitHub Events API. Understanding the [`github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/github_bot.py) authentication method is essential for developers maintaining or extending this automation, as it determines how the script securely accesses GitHub data.

## Basic Authentication Implementation in github_bot.py

The core authentication logic resides in the `get_data` function within [`script/github_bot/github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/script/github_bot/github_bot.py). When fetching GitHub events, the script constructs an HTTP GET request that includes credentials through the `auth` parameter:

```python
response = requests.get(
    API['events'] + args,
    auth=(ACCOUNT['username'], ACCOUNT['password'])
)

```

This `auth` tuple triggers the *requests* library to automatically encode the credentials using Base64 and append an `Authorization: Basic <credentials>` header to the HTTP request. The GitHub API receives this header and validates the credentials against its user database before returning the requested event data.

## Source Code Structure and Credential Management

According to the HelloGitHub source code, the authentication components are organized in specific sections of [`script/github_bot/github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/script/github_bot/github_bot.py):

- **Lines 25–29**: Define the `ACCOUNT` dictionary containing the `'username'` and `'password'` keys
- **Line 32**: Specifies the `API['events']` endpoint target for the authenticated requests

The credentials remain separate from the request logic, allowing administrators to configure access without modifying the core `get_data` implementation. This separation also enables the bot to support modern GitHub authentication patterns, such as personal access tokens, by substituting the traditional password field.

## Practical Usage Examples

### Fetching Events with Username and Password

To retrieve GitHub events using the built-in authentication mechanism, populate the `ACCOUNT` dictionary and call `get_data`:

```python
from script.github_bot.github_bot import get_data

# Configure credentials (typically set in the module's ACCOUNT dict)

ACCOUNT = {
    'username': 'my_github_user',
    'password': 'my_github_password'
}

# Retrieve the first page of received events

events = get_data(page=1)

print(events)  # Returns a list of event dictionaries

```

### Migrating to Personal Access Tokens

While the script uses Basic Authentication, GitHub now recommends token-based access for enhanced security. You can adapt [`github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/github_bot.py) to use a personal access token without modifying the HTTP logic by placing the token in the password field:

```python
ACCOUNT = {
    'username': '',
    'password': 'ghp_YourPersonalAccessToken'
}

```

Alternatively, some token implementations require the token as the username with an empty password:

```python
ACCOUNT = {
    'username': 'ghp_YourPersonalAccessToken',
    'password': ''
}

```

Both approaches generate a valid Basic Auth header that GitHub's API accepts, treating the token as the authentication secret.

## Integration with the HelloGitHub Workflow

The [`script/make_content/make_content.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/script/make_content/make_content.py) file imports functions from [`github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/github_bot.py) to process the authenticated event data into email content. When `get_data` successfully authenticates and retrieves events, the make_content module filters and formats these entries for the HelloGitHub newsletter distribution. This pipeline depends on the Basic Authentication mechanism to ensure uninterrupted access to the GitHub Events API endpoint defined at `API['events']`.

## Summary

- The [`github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/github_bot.py) script uses **HTTP Basic Authentication** via the `requests` library to access the GitHub API
- Credentials are passed as a tuple `(username, password)` to the `auth` parameter in `requests.get()` within the `get_data` function
- The `ACCOUNT` dictionary (lines 25–29) and `API['events']` endpoint (line 32) in [`script/github_bot/github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/script/github_bot/github_bot.py) configure the authentication target
- **Personal access tokens** are supported by substituting the token for the password while maintaining the same Basic Auth structure
- The authentication mechanism enables the [`make_content.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/make_content.py) module to generate newsletter content from live GitHub event data

## Frequently Asked Questions

### What authentication method does github_bot.py use for GitHub API requests?

The script implements **HTTP Basic Authentication** using the Python `requests` library. In the `get_data` function located in [`script/github_bot/github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/script/github_bot/github_bot.py), the code passes an `auth` tuple containing the username and password to `requests.get()`, which automatically generates the `Authorization: Basic` header required by the GitHub API.

### Can I use a personal access token instead of a password with github_bot.py?

Yes. Although the script was originally designed for username-password authentication, you can use a GitHub personal access token by placing it in the `password` field of the `ACCOUNT` dictionary while leaving the `username` field empty (or vice versa, depending on your token configuration). The `requests` library will still encode this as a Basic Auth header, which GitHub accepts for token-based access.

### Where are the GitHub API credentials stored in the HelloGitHub repository?

The credentials are stored in the `ACCOUNT` dictionary defined in [`script/github_bot/github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/script/github_bot/github_bot.py) (lines 25–29). This dictionary contains `'username'` and `'password'` keys that the `get_data` function references when constructing authenticated requests to the `API['events']` endpoint.

### Is Basic Authentication secure for GitHub API automation?

Basic Authentication transmits credentials in every request (encoded but not encrypted), making it less secure than modern alternatives like OAuth or GitHub Apps. However, when used with **personal access tokens** rather than actual passwords, and combined with HTTPS (which GitHub requires), the risk is mitigated. For production environments, consider migrating to token-based authentication or GitHub Apps, though the current [`github_bot.py`](https://github.com/521xueweihan/HelloGitHub/blob/main/github_bot.py) implementation supports tokens through the existing Basic Auth mechanism.