Top Related Projects
An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.
The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.
Open source API development ecosystem - https://hoppscotch.io (open-source alternative to Postman, Insomnia)
Open source API development ecosystem - https://hoppscotch.io (open-source alternative to Postman, Insomnia)
Quick Overview
HTTPSnippet is a library that generates code snippets for HTTP requests in various programming languages and tools. It takes HTTP request data as input and outputs ready-to-use code snippets, making it easier for developers to integrate API calls into their projects across different platforms and languages.
Pros
- Supports a wide range of programming languages and tools (e.g., cURL, Python, JavaScript, Ruby, PHP)
- Easily integrates with API documentation tools to provide interactive examples
- Customizable output formats and options for each target language
- Actively maintained and open-source
Cons
- Limited to generating snippets for HTTP requests only
- May not cover all edge cases or complex scenarios in generated snippets
- Requires keeping up with changes in target languages and libraries
- Some less common languages or frameworks may have limited support
Code Examples
- Generate a cURL snippet:
const HTTPSnippet = require('httpsnippet');
const snippet = new HTTPSnippet({
method: 'POST',
url: 'https://api.example.com/users',
headers: {
'Content-Type': 'application/json'
},
postData: {
mimeType: 'application/json',
text: JSON.stringify({ name: 'John Doe', email: 'john@example.com' })
}
});
console.log(snippet.convert('curl'));
- Generate a Python requests snippet:
const HTTPSnippet = require('httpsnippet');
const snippet = new HTTPSnippet({
method: 'GET',
url: 'https://api.example.com/users?page=1&limit=10',
headers: {
'Authorization': 'Bearer token123'
}
});
console.log(snippet.convert('python', 'requests'));
- Generate a Node.js Axios snippet:
const HTTPSnippet = require('httpsnippet');
const snippet = new HTTPSnippet({
method: 'PUT',
url: 'https://api.example.com/users/123',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer token123'
},
postData: {
mimeType: 'application/json',
text: JSON.stringify({ name: 'Jane Doe', email: 'jane@example.com' })
}
});
console.log(snippet.convert('node', 'axios'));
Getting Started
To use HTTPSnippet in your project, follow these steps:
- Install the package:
npm install httpsnippet
- Import and use in your code:
const HTTPSnippet = require('httpsnippet');
const snippet = new HTTPSnippet({
method: 'GET',
url: 'https://api.example.com/users'
});
const pythonCode = snippet.convert('python', 'requests');
console.log(pythonCode);
This will generate a Python requests snippet for a GET request to the specified URL.
Competitor Comparisons
An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.
Pros of mitmproxy
- More comprehensive tool for HTTP/HTTPS analysis and manipulation
- Offers a full-featured command-line interface and web interface
- Supports advanced features like SSL interception and scripting
Cons of mitmproxy
- Steeper learning curve due to its extensive feature set
- Requires more system resources to run compared to httpsnippet
- May be overkill for simple HTTP request generation tasks
Code Comparison
mitmproxy (Python script example):
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if flow.request.pretty_url == "example.com/api":
flow.request.headers["Custom-Header"] = "Value"
httpsnippet (JavaScript usage example):
const httpsnippet = require('httpsnippet');
const snippet = new httpsnippet({
method: 'GET',
url: 'https://example.com/api',
headers: { 'Custom-Header': 'Value' }
});
console.log(snippet.convert('python', 'requests'));
Summary
mitmproxy is a powerful, feature-rich tool for HTTP/HTTPS analysis and manipulation, offering advanced capabilities like SSL interception and scripting. It provides a comprehensive solution for network traffic inspection but may have a steeper learning curve.
httpsnippet, on the other hand, focuses specifically on generating HTTP request code snippets in various programming languages. It's lighter and easier to use for simple request generation tasks but lacks the advanced features and analysis capabilities of mitmproxy.
Choose mitmproxy for in-depth network analysis and manipulation, or httpsnippet for quick and easy HTTP request code generation across multiple languages.
The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.
Pros of Insomnia
- Full-featured GUI application for API development and testing
- Supports a wide range of authentication methods and request types
- Includes features like environment variables, code generation, and response visualization
Cons of Insomnia
- Larger project scope and complexity
- Requires installation and regular updates
- May have a steeper learning curve for new users
Code Comparison
HTTPSnippet (JavaScript):
const HTTPSnippet = require('httpsnippet');
const snippet = new HTTPSnippet(har);
const code = snippet.convert('python', 'requests');
Insomnia (JavaScript):
const { exportHARFromWorkspace } = require('insomnia-importers');
const har = await exportHARFromWorkspace(workspace);
// Further processing required to generate code snippets
Key Differences
- HTTPSnippet focuses solely on generating code snippets from HAR data
- Insomnia is a comprehensive API development tool with code generation as one of many features
- HTTPSnippet can be easily integrated into other projects as a library
- Insomnia provides a complete ecosystem for API testing and development
Both projects are maintained by Kong and serve different purposes within the API development workflow. HTTPSnippet is more specialized and lightweight, while Insomnia offers a broader range of features in a standalone application.
Open source API development ecosystem - https://hoppscotch.io (open-source alternative to Postman, Insomnia)
Pros of Hoppscotch
- More comprehensive API development and testing platform
- User-friendly interface with a modern, sleek design
- Supports real-time collaboration features
Cons of Hoppscotch
- Larger codebase, potentially more complex to contribute to
- Focused on full API development workflow, may be overkill for simple HTTP snippet generation
Code Comparison
Hoppscotch (Vue.js component):
<template>
<div class="http-request">
<HttpMethod v-model="method" />
<HttpUrl v-model="url" />
<HttpHeaders v-model="headers" />
<HttpBody v-model="body" />
</div>
</template>
HttpSnippet (JavaScript):
const httpsnippet = require('httpsnippet');
const snippet = new httpsnippet({
method: 'POST',
url: 'http://api.example.com/users',
headers: { 'content-type': 'application/json' },
postData: { mimeType: 'application/json', text: '{"name":"John Doe"}' }
});
Summary
Hoppscotch is a full-featured API development platform with a modern interface, while HttpSnippet focuses specifically on generating HTTP request code snippets. Hoppscotch offers a more comprehensive solution but may be more complex, whereas HttpSnippet is simpler and more focused on its core functionality.
Open source API development ecosystem - https://hoppscotch.io (open-source alternative to Postman, Insomnia)
Pros of Hoppscotch
- More comprehensive API development and testing platform
- User-friendly interface with a modern, sleek design
- Supports real-time collaboration features
Cons of Hoppscotch
- Larger codebase, potentially more complex to contribute to
- Focused on full API development workflow, may be overkill for simple HTTP snippet generation
Code Comparison
Hoppscotch (Vue.js component):
<template>
<div class="http-request">
<HttpMethod v-model="method" />
<HttpUrl v-model="url" />
<HttpHeaders v-model="headers" />
<HttpBody v-model="body" />
</div>
</template>
HttpSnippet (JavaScript):
const httpsnippet = require('httpsnippet');
const snippet = new httpsnippet({
method: 'POST',
url: 'http://api.example.com/users',
headers: { 'content-type': 'application/json' },
postData: { mimeType: 'application/json', text: '{"name":"John Doe"}' }
});
Summary
Hoppscotch is a full-featured API development platform with a modern interface, while HttpSnippet focuses specifically on generating HTTP request code snippets. Hoppscotch offers a more comprehensive solution but may be more complex, whereas HttpSnippet is simpler and more focused on its core functionality.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
HTTPSnippet
HTTP Request snippet generator for many languages & tools including:
cURL
,HTTPie
,JavaScript
,Node
,C
,Java
,PHP
,Objective-C
,Swift
,Python
,Ruby
,C#
,Go
,OCaml
,Crystal
and more!
Relies on the popular HAR format to import data and describe HTTP calls.
See it in action on companion service: APIembed
Quickstart
Core Concepts
- HTTPSnippet's input is a JSON object that represents an HTTP request in the HAR Request Object format.
- HTTPSnippet's output is executable code that sends the input HTTP request, in a wide variety of languages and libraries.
- You provide HTTPSnippet your desired
target
,client
, andoptions
.- a
target
refers to a group of code generators. Generally, a target is a programming language likeRust
,Go
,C
, orOCaml
. client
refers to a more specific generator within the parent target. For example, theC#
target has two available clients,httpclient
andrestsharp
, each referring to a popular C# library for making requests.options
are per client and generally control things like specific indent behaviors or other formatting rules.
- a
CLI Quickstart
httpsnippet har.json \ # the path your input file (must be in HAR format)
--target shell \ # your desired language
--client curl \ # your desired language library
--output ./examples \ # an output directory, otherwise will just output to Stdout
--options '{ "indent": false }' # any client options as a JSON string
TypeScript Library Quickstart
import { HTTPSnippet } from 'httpsnippet';
const snippet = new HTTPSnippet({
method: 'GET',
url: 'http://mockbin.com/request',
});
const options = { indent: '\t' };
const output = snippet.convert('shell', 'curl', options);
console.log(output);
CLI Usage
CLI Installation
NPM | Yarn |
---|---|
npm install --global httpsnippet | yarn global add httpsnippet |
httpsnippet [harFilePath]
the default command
Options:
--help Show help [boolean]
--version Show version number [boolean]
-t, --target target output [string] [required]
-c, --client language client [string]
-o, --output write output to directory [string]
-x, --options provide extra options for the target/client [string]
Examples:
httpsnippet my_har.json --target rust --client actix --output my_src_directory
Example
The input to HTTPSnippet is any valid HAR Request Object, or full HAR log format.
`example.json`
{
"method": "POST",
"url": "http://mockbin.com/har?key=value",
"httpVersion": "HTTP/1.1",
"queryString": [
{
"name": "foo",
"value": "bar"
},
{
"name": "foo",
"value": "baz"
},
{
"name": "baz",
"value": "abc"
}
],
"headers": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
}
],
"cookies": [
{
"name": "foo",
"value": "bar"
},
{
"name": "bar",
"value": "baz"
}
],
"postData": {
"mimeType": "application/x-www-form-urlencoded",
"params": [
{
"name": "foo",
"value": "bar"
}
]
}
}
httpsnippet example.json --target shell --client curl --output ./examples
$ tree examples
examples/
âââ example.sh
inside examples/example.sh
you'll see the generated output:
curl --request POST \
--url 'http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value' \
--header 'accept: application/json' \
--header 'content-type: application/x-www-form-urlencoded' \
--cookie 'foo=bar; bar=baz' \
--data foo=bar
provide extra options:
httpsnippet example.json --target shell --client curl --output ./examples --options '{ "indent": false }'
and see how the output changes, in this case without indentation
curl --request POST --url 'http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value' --header 'accept: application/json' --header 'content-type: application/x-www-form-urlencoded' --cookie 'foo=bar; bar=baz' --data foo=bar
TypeScript Library Usage
Library Installation
NPM | Yarn |
---|---|
npm install --save httpsnippet | yarn add httpsnippet |
Types
HarRequest
See https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/har-format for the TypeScript type corresponding to this type
HarEntry
interface Entry {
request: Partial<HarRequest>;
}
interface HarEntry {
log: {
version: string;
creator: {
name: string;
version: string;
};
entries: {
request: Partial<HarRequest>;
}[];
};
}
TargetId
type TargetId = string;
ClientId
type ClientId = string;
Converter
type Converter<T extends Record<string, any>> = (
request: Request,
options?: Merge<CodeBuilderOptions, T>,
) => string;
Client
interface Client<T extends Record<string, any> = Record<string, any>> {
info: ClientInfo;
convert: Converter<T>;
}
ClientInfo
interface ClientInfo {
key: ClientId;
title: string;
link: string;
description: string;
}
Extension
type Extension = `.${string}` | null;
TargetInfo
interface TargetInfo {
key: TargetId;
title: string;
extname: Extension;
default: string;
}
Target
interface Target {
info: TargetInfo;
clientsById: Record<ClientId, Client>;
}
Library Exports
new HTTPSnippet(source: HarRequest | HarEntry)
Name of conversion target
import { HTTPSnippet } from 'httpsnippet';
const snippet = new HTTPSnippet({
method: 'GET',
url: 'http://mockbin.com/request',
});
snippet.convert(targetId: string, clientId?: string, options?: T)
The convert
method requires a target ID such as node
, shell
, go
, etc. If no client ID is provided, the default client for that target will be used.
Note: to see the default targets for a given client, see
target.info.default
. For exampleshell
's target has the default ofcurl
.
Many targets provide specific options. Look at the TypeScript types for the target you are interested in to see what options it provides. For example shell:curl
's options correspond to the CurlOptions
interface in the shell:curl
client file.
import { HTTPSnippet } from 'httpsnippet';
const snippet = new HTTPSnippet({
method: 'GET',
url: 'http://mockbin.com/request',
});
// generate Node.js: Native output
console.log(snippet.convert('node'));
// generate Node.js: Native output, indent with tabs
console.log(
snippet.convert('node', {
indent: '\t',
}),
);
isTarget
Useful for validating that a custom target is considered valid by HTTPSnippet.
const isTarget: (target: Target) => target is Target;
import { myCustomTarget } from './my-custom-target';
import { isTarget } from 'httpsnippet';
try {
console.log(isTarget(myCustomTarget));
} catch (error) {
console.error(error);
}
addTarget
Use addTarget
to add a new custom target that you can then use in your project.
const addTarget: (target: Target) => void;
import { myCustomClient } from './my-custom-client';
import { HAR } from 'my-custom-har';
import { HTTPSnippet, addTargetClient } from 'httpsnippet';
addTargetClient(myCustomClient);
const snippet = new HTTPSnippet(HAR);
const output = snippet.convert('customTargetId');
console.log(output);
isClient
Useful for validating that a custom client is considered valid by HTTPSnippet.
const isClient: (client: Client) => client is Client;
import { myCustomClient } from './my-custom-client';
import { isClient } from 'httpsnippet';
try {
console.log(isClient(myCustomClient));
} catch (error) {
console.error(error);
}
addTargetClient
Use addTargetClient
to add a custom client to an existing target. See addTarget
for how to add a custom target.
const addTargetClient: (targetId: TargetId, client: Client) => void;
import { myCustomClient } from './my-custom-client';
import { HAR } from 'my-custom-har';
import { HTTPSnippet, addTargetClient } from 'httpsnippet';
addTargetClient('customTargetId', myCustomClient);
const snippet = new HTTPSnippet(HAR);
const output = snippet.convert('customTargetId', 'customClientId');
console.log(output);
Bugs and feature requests
Have a bug or a feature request? Please first read the issue guidelines and search for existing and closed issues. If your problem or idea is not addressed yet, please open a new issue.
Contributing
Please read through our contributing guidelines. Included are directions for opening issues, coding standards, and notes on development.
For info on creating new conversion targets, please review this guideline
Moreover, if your pull request contains TypeScript patches or features, you must include relevant unit tests.
Editor preferences are available in the editor config for easy use in common text editors. Read more and download plugins at http://editorconfig.org.
Top Related Projects
An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.
The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.
Open source API development ecosystem - https://hoppscotch.io (open-source alternative to Postman, Insomnia)
Open source API development ecosystem - https://hoppscotch.io (open-source alternative to Postman, Insomnia)
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot