Security News
Combatting Alert Fatigue by Prioritizing Malicious Intent
In 2023, data breaches surged 78% from zero-day and supply chain attacks, but developers are still buried under alerts that are unable to prevent these threats.
httpsnippet
Advanced tools
HTTP Request snippet generator for *most* languages
HTTP Request snippet generator for many languages & tools including:
cURL
,HTTPie
,JavaScript
,Node
,C
,Java
,PHP
,Objective-C
,Swift
,Python
,Ruby
,C#
,Go
,OCaml
and more!
Relies on the popular HAR format to import data and describe HTTP calls.
See it in action on companion service: APIembed
target
, client
, and options
.
target
refers to a group of code generators. Generally, a target is a programming language like Rust
, Go
, C
, or OCaml
.client
refers to a more specific generator within the parent target. For example, the C#
target has two available clients, httpclient
and restsharp
, 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.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
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);
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
The input to HTTPSnippet is any valid HAR Request Object, or full HAR log format.
{
"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
NPM | Yarn |
---|---|
npm install --save httpsnippet | yarn add httpsnippet |
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>;
}
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);
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.
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.
FAQs
HTTP Request snippet generator for *most* languages
The npm package httpsnippet receives a total of 43,991 weekly downloads. As such, httpsnippet popularity was classified as popular.
We found that httpsnippet demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
In 2023, data breaches surged 78% from zero-day and supply chain attacks, but developers are still buried under alerts that are unable to prevent these threats.
Security News
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
Security News
License exceptions modify the terms of open source licenses, impacting how software can be used, modified, and distributed. Developers should be aware of the legal implications of these exceptions.