- Notifications
You must be signed in to change notification settings - Fork237
HTTP Request snippet generator for many languages & libraries
License
Kong/httpsnippet
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
HTTP Request snippet generator formany languages & tools including:
cURL
,HTTPie
,JavaScript
,Node
,C
,Java
,PHP
,Objective-C
,Swift
,Python
,Ruby
,C#
,Go
,OCaml
,Crystal
andmore!
Relies on the popularHAR format to import data and describe HTTP calls.
See it in action on companion service:APIembed
- HTTPSnippet's input is a JSON object that represents an HTTP request in theHAR 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 aprogramming 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
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';constsnippet=newHTTPSnippet({method:'GET',url:'http://mockbin.com/request',});constoptions={indent:'\t'};constoutput=snippet.convert('shell','curl',options);console.log(output);
NPM | Yarn |
---|---|
npm install --global httpsnippet | yarn global add httpsnippet |
httpsnippet [harFilePath]the default commandOptions: --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 validHAR Request Object, or fullHAR 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 examplesexamples/└── example.sh
insideexamples/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 |
Seehttps://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/har-format for the TypeScript type corresponding to this type
interfaceEntry{request:Partial<HarRequest>;}interfaceHarEntry{log:{version:string;creator:{name:string;version:string;};entries:{request:Partial<HarRequest>;}[];};}
typeTargetId=string;
typeClientId=string;
typeConverter<TextendsRecord<string,any>>=(request:Request,options?:Merge<CodeBuilderOptions,T>,)=>string;
interfaceClient<TextendsRecord<string,any>=Record<string,any>>{info:ClientInfo;convert:Converter<T>;}
interfaceClientInfo{key:ClientId;title:string;link:string;description:string;}
typeExtension= `.${string}`|null;
interfaceTargetInfo{key:TargetId;title:string;extname:Extension;default:string;}
interfaceTarget{info:TargetInfo;clientsById:Record<ClientId,Client>;}
Name ofconversion target
import{HTTPSnippet}from'httpsnippet';constsnippet=newHTTPSnippet({method:'GET',url:'http://mockbin.com/request',});
Theconvert
method requires a target ID such asnode
,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 exampleshell:curl
's options correspond to theCurlOptions
interface intheshell:curl
client file.
import{HTTPSnippet}from'httpsnippet';constsnippet=newHTTPSnippet({method:'GET',url:'http://mockbin.com/request',});// generate Node.js: Native outputconsole.log(snippet.convert('node'));// generate Node.js: Native output, indent with tabsconsole.log(snippet.convert('node',{indent:'\t',}),);
Useful for validating that a custom target is considered valid by HTTPSnippet.
constisTarget:(target:Target)=>target isTarget;
import{myCustomTarget}from'./my-custom-target';import{isTarget}from'httpsnippet';try{console.log(isTarget(myCustomTarget));}catch(error){console.error(error);}
UseaddTarget
to add a new custom target that you can then use in your project.
constaddTarget:(target:Target)=>void;
import{myCustomClient}from'./my-custom-client';import{HAR}from'my-custom-har';import{HTTPSnippet,addTargetClient}from'httpsnippet';addTargetClient(myCustomClient);constsnippet=newHTTPSnippet(HAR);constoutput=snippet.convert('customTargetId');console.log(output);
Useful for validating that a custom client is considered valid by HTTPSnippet.
constisClient:(client:Client)=>client isClient;
import{myCustomClient}from'./my-custom-client';import{isClient}from'httpsnippet';try{console.log(isClient(myCustomClient));}catch(error){console.error(error);}
UseaddTargetClient
to add a custom client to an existing target. SeeaddTarget
for how to add a custom target.
constaddTargetClient:(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);constsnippet=newHTTPSnippet(HAR);constoutput=snippet.convert('customTargetId','customClientId');console.log(output);
Have a bug or a feature request? Please first read theissue 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 ourcontributing guidelines. Included are directions for opening issues, coding standards, and notes on development.
For info on creating new conversion targets, please review thisguideline
Moreover, if your pull request contains TypeScript patches or features, you must include relevant unit tests.
Editor preferences are available in theeditor config for easy use in common text editors. Read more and download plugins athttp://editorconfig.org.
About
HTTP Request snippet generator for many languages & libraries
Topics
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.