It sounds like you want an AJAX request of some sort.
In your functions.php file, enqueue some JavaScript to handle the form.
wp_register_script( 'my-scripts', get_stylesheet_directory_uri() . '/[path to your scripts]/myscripts.js', array( 'jquery' ), '1.0', true );
See this link for reference.
Right under that, add a JavaScript variable for your AJAX URL.
wp_localize_script( 'my-scripts', 'data', array( 'ajax_url' => admin_url( 'admin-ajax.php' );
Reference on wp_localize_script and admin_url.
After the script is registered, add it to the queue so it can be loaded.
wp_enqueue_script( 'my-scripts' );
Under that, add in your code for getting the response from your API.
// your function, set up for AJAX
function get_api_response() {
$response = wp_remote_get('http://localhost:9000/shortcode/'.$sc);
if (is_array($response)) {
$body = $response['body'];
$data = json_decode($body);
echo $data;
if (! is_wp_error($data)) {
echo "error";
}
}
wp_die(); // make sure you do this
}
add_action( 'wp_ajax_get_api_response', 'get_api_response' );
add_action( 'wp_ajax_nopriv_get_api_response', 'get_api_response' );
Reference here.
And finally, in your JavaScript file (myscripts.js in this example), handle the form submission.
jQuery(document).ready(function($) {
$('#myform').on('submit', function(e) {
e.preventDefault(); // stop the form from submitting
$.post(
data['ajax_url'], // passed in from wp_localize_script
{
'input' : $('#input').val()
},
function( response ) {
// do what you want to do here
// the response will be what's echoed by the
// get_api_response function
}
);
});
});
If you don’t want to use AJAX, the “shortcode” you’re using will need to be made into a real shortcode and used on the page you’re posting your form to. Info on that here.
Your shortcode would then need to grab the $_POST values from your form and do something with them. In either case, make sure you sanitize all values coming from the outside world.
Hope this helps.
Cheers!