HTTP Request snippet generator for *most* languages
npm install @jsonic-co/httpsnippetcURL, HTTPie, JavaScript, Node, C, Java, PHP, Objective-C, Swift, Python, Ruby, C#, Go, OCaml, Crystal and more!
HarRequest
HarEntry
TargetId
ClientId
Converter
Client
ClientInfo
Extension
TargetInfo
Target
new HTTPSnippet(source: HarRequest | HarEntry)
snippet.convert(targetId: string, clientId?: string, options?: T)
isTarget
addTarget
isClient
addTargetClient
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.
shell
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
`
$3
`ts
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
$3
| NPM | Yarn |
| ------------------------------------------- | -------------------------------------- |
| npm install --global httpsnippet
| yarn global add httpsnippet
|
`text
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
`
$3
The input to HTTPSnippet is any valid HAR Request Object, or full HAR log format.
example.json
`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"
}
]
}
}
`
`shell
httpsnippet example.json --target shell --client curl --output ./examples
`
`console
$ tree examples
examples/
└── example.sh
`
inside examples/example.sh you'll see the generated output:
`shell
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:
`shell
httpsnippet example.json --target shell --client curl --output ./examples --options '{ "indent": false }'
`
and see how the output changes, in this case without indentation
`shell
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
$3
| NPM | Yarn |
| ----------------------------------------- | ------------------------------- |
| npm install --save httpsnippet
| yarn add httpsnippet
|
$3
#### HarRequest
See for the TypeScript type corresponding to this type
#### HarEntry
`ts
interface Entry {
request: Partial;
}
interface HarEntry {
log: {
version: string;
creator: {
name: string;
version: string;
};
entries: {
request: Partial;
}[];
};
}
`
#### TargetId
`ts
type TargetId = string;
`
#### ClientId
`ts
type ClientId = string;
`
#### Converter
`ts
type Converter> = (
request: Request,
options?: Merge,
) => string;
`
#### Client
`ts
interface Client = Record> {
info: ClientInfo;
convert: Converter;
}
`
#### ClientInfo
`ts
interface ClientInfo {
key: ClientId;
title: string;
link: string;
description: string;
}
`
#### Extension
`ts
type Extension = .${string} | null;
`
#### TargetInfo
`ts
interface TargetInfo {
key: TargetId;
title: string;
extname: Extension;
default: string;
}
`
#### Target
`ts
interface Target {
info: TargetInfo;
clientsById: Record;
}
`
$3
#### new HTTPSnippet(source: HarRequest | HarEntry)
Name of conversion target
`ts
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 example shell's target has the default of curl.
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.
`ts
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.
`ts
const isTarget: (target: Target) => target is Target;
`
`ts
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.
`ts
const addTarget: (target: Target) => void;
`
`ts
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.
`ts
const isClient: (client: Client) => client is Client;
`
`ts
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.
`ts
const addTargetClient: (targetId: TargetId, client: Client) => void;
`
`ts
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);
``