var domain = "www.reed.co.uk";
var userAgent = "ReedAgent";
var apiToken = "your_api_token";
var clientId = "your_client_id";
var url = $"https://{domain}/recruiter/api/1.0/jobs";
var httpMethod = "POST";
var timeStamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz");
var stringToSign = $"{httpMethod}{userAgent}{url}{domain}{timeStamp}";
// Note that the API token can be treated as a .NET GUID or a string.
// The following line could be replaced with 'var hmacsha1 = new HMACSHA1(Encoding.ASCII.GetBytes(apiToken));'
// which generates a different signature but is equally valid.
var hmacsha1 = new HMACSHA1(new Guid(apiToken).ToByteArray());
byte[] byteArray = Encoding.ASCII.GetBytes(stringToSign);
var calculatedSignature = Convert.ToBase64String(hmacsha1.ComputeHash(byteArray));
// Add the required headers:
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("ContentType", "application/x-www-form-urlencoded");
httpClient.DefaultRequestHeaders.Add("Method", "POST");
httpClient.DefaultRequestHeaders.Add("User-Agent", userAgent);
httpClient.DefaultRequestHeaders.Add("X-ApiSignature", calculatedSignature);
httpClient.DefaultRequestHeaders.Add("X-ApiClientId", clientId.ToString());
httpClient.DefaultRequestHeaders.Add("X-TimeStamp", timeStamp);
var postData = new List<KeyValuePair<string, string>>();
// job data goes here
// e.g. postData.Add(new KeyValuePair<string, string>("title","My job title"));
using (var content = new FormUrlEncodedContent(postData))
{
var response = await httpClient.PostAsync(url, content);
}
<?php
$user_agent = 'ReedAgent';
$api_token = 'your_api_token';
$client_id = 'your_client_id';
$url = 'https://www.reed.co.uk/recruiter/api/1.0/jobs';
$http_method = 'POST';
$dt = new DateTime('now', new DateTimeZone('UTC'));
$timestamp = $dt->format('Y-m-d\TH:i:s') . '+00:00';
// Calculate signature
$string_to_sign = $http_method . $user_agent . urldecode($url) . parse_url($url, PHP_URL_HOST) . $timestamp;
$hmac_sha1_hash = hash_hmac('sha1', $string_to_sign, $api_token , true);
$api_signature = base64_encode($hmac_sha1_hash);
// Add required headers
$headers = array();
$headers[] = 'ContentType: application/x-www-form-urlencoded';
$headers[] = 'Method: ' . $http_method;
$headers[] = 'User-Agent: ' . $user_agent;
$headers[] = 'X-ApiSignature: ' . $api_signature;
$headers[] = 'X-ApiClientId: ' . $client_id;
$headers[] = 'X-TimeStamp: ' . $timestamp;
// Construct job data
$data = array(
// Job details go here
// e.g. 'title' => 'My job title'
);
// Build request using cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_URL, $url);
if($http_method == 'POST') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// Make API call
$response = curl_exec($ch);
curl_close($ch);
?>
let request = require('request');
let crypto = require('crypto');
let moment = require('moment');
let domain = 'www.reed.co.uk';
let userAgent = 'ReedAgent';
let apiToken = 'your_api_token';
let clientId = 'your_client_id';
let url = 'https://' + domain + '/recruiter/api/1.0/jobs';
let httpMethod = 'POST';
let timeStamp = moment().format('YYYY-MM-DDTHH:mm:ssZ'); // timeStamp should be in '2017-01-01T14:30:23+00:00' format
let stringToSign = httpMethod + userAgent + url + domain + timeStamp;
let signature =
new Buffer(
crypto.createHmac('sha1', apiToken)
.update(stringToSign)
.digest()
).toString('base64');
// Build a request with the required headers
let options = {
url: url,
headers: {
'ContentType': 'application/x-www-form-urlencoded',
'Method': httpMethod,
'User-Agent': userAgent,
'X-ApiSignature': signature,
'X-ApiClientId': clientId,
'X-TimeStamp': timeStamp
},
form: {
// values to post
// e.g. title:'My job title'
}
};
// Post the request
request.post(options, callback);
# Auth + CV search example
use POSIX qw(strftime);
use Digest::MD5 qw(md5_hex);
use Digest::SHA qw(sha1 sha1_hex sha1_base64 hmac_sha1_base64);
use LWP::Simple;
sub guid_to_dotnet_guid
{
my @guid = split //,$_[0];
@guid = map(ord, @guid);
my @new_guid_order = (6,7,4,5,2,3,0,1,11,12,9,10,16,17,14,15,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35);
my @reordered_guid = @guid[@new_guid_order];
my $new_guid = join("", map(chr, @reordered_guid));
@array = ( $new_guid =~ m/../g );
my @final_array;
foreach(@array){
push(@final_array, hex($_));
};
$new_guid = join("", map(chr, @final_array));
return $new_guid;
}
my $key = "7e94901a-f6a2-4b97-a1df-0bafdeba3b99"; # API Token -- REPLACE THIS WITH YOUR API TOKEN
my $api_client_id = '1'; # API Client ID -- REPLACE THIS WITH YOUR API CLIENT ID
my $now_string = strftime "%Y-%m-%dT%H:%M:%S", localtime; # Timestamp (to use in the signature string and in the headers)
my $posting_key = "7e94901a-f6a2-4b97-a1df-0bafdeba3b99"; # Posting Key (see api doc) -- REPLACE THIS WITH A VALID POSTING KEY (IF NEEDED)
my $username = "email\@email.com"; # Client username (see api doc) (please note that in perl email addresses must be passed like myname\@mydomain.com (note the escaping of \@). -- REPLACE THIS WITH A VALID EMAIL ADDRESS (IF NEEDED)(see doc)
my $host = "www.reed.co.uk";
my $user_agent = 'PerlTest'; # Your user agent
my $search_url = "https://".$host."/recruiter/api/1.0/cvsearch/";
my $search_query_string = "postingKey=".$posting_key."&username=".$username;
my $signature_string = "GET".$user_agent.$search_url. "?" .$search_query_string.$host.$now_string; # string to sign made of: HttpMethod + UserAgent + SearchUrl + QueryString + Host + TimeStamp
my $browser = LWP::UserAgent->new;
my $dotnet_guid = guid_to_dotnet_guid($key); # this is needed because of the different guid representation in .NET
my $digest = hmac_sha1_base64($signature_string, $key); # compute the hash of signature_string using dotnet_guid as key
my $full_url = $search_url."?".$search_query_string;
my $response = $browser->get( $full_url,
'Content_type' => 'application/json',
'Method' => 'GET',
'X-ApiClientId' => $api_client_id,
'X-TimeStamp' => $now_string,
'X-ApiSignature' => $digest."=",
'User-Agent' => $user_agent
);