I am developing my first API in lua to manage geodis transport in my company.
I finished the development and I have a 400 error my json request is correct is the header or a bad url can return me a 400 error?I tested on their site the request works correctly.
you will find below the calculation of the hash and the header and the url.
````url_webservice = "https://espace-client-rct.geodis.com/services/"`
````endpoint = url_webservice..Service
````t = os.date('*t')
````timestamp =os.time(t)
````milliseconde = (timestamp * 1000)
````message = cle..';'..id..';'..milliseconde..';'..'fr'..';'..url_Service..';'..jsonGEO
````Trace("log", "message:" ..message)
````local Hash = cryptographicHash(toLocal8Bit(message), "sha256")
````Trace("log", "hash:" ..Hash)
````local token = id..';'..milliseconde..';'..'fr'..';'..url_Service..';'..Hash
````Trace("log", "token:" ..token)
````local headers = {
````"Accept: */*",
````"Content-Type: application/json; charset=utf-8",
````"X-GEODIS-Service:" .. token
````}
````local request = ws:createHttpPostRequest(url, headers, jsonGEO)`
I've tried everything to make it work and I can't find the problem
Related
I am trying to use a POST command in deluge to recall a document. When I make the call I get back a no file found (I have verified the id is correct).
The format should come out like this: POST https://sign.zoho.com/api/v1/requests/[Request ID]/recall
https://www.zoho.com/sign/api/#recall-document
What am I doing incorrect?
//Get Zoho Request ID
resp = Sign_ID.toLong();
//add recall command
data = resp + "/recall";
// JSON
response = invokeUrl
[
url: "https://sign.zoho.com/api/v1/requests/"
type: POST
parameters: data.toString()
];
info "Attempting to recall waiver..." + response;
Verified Sign_ID is returning correct value
Verified correct API call
Verified error code
Other than what #ZohoCoder have mentioned.
From the documentation, it seems what you have done is almost right.
// Get Zoho Request ID
resp = Sign_ID.toLong();
// use a variable for the URL of the request
urlRequest = "https://sign.zoho.com/api/v1/requests/" + resp + "/recall";
// JSON
response = invokeUrl
[
url: urlRequest
type: POST
];
info "Attempting to recall waiver..." + response;
I am attempting to create my first PowerBI Custom Connecter to connect to the Vimeo API. I am stuck on the final step of the authorization flow - getting back an access token. When trying out the Connecter in PowerBI, it seems to authenticate properly when I hit the access token endpoint, but I get back a warning "[unsupported_grant_type] Unsupported grant type"
It appears I am not sending the grant_type properly in the request. Here are Vimeo's requirements of what is sent along in the header and body of the request:
Header
Set value to
Authorization
basic base64_encode(x:y), where x is the client identifier and y is the client secret
Content-Type
application/json
Accept
application/vnd.vimeo.*+json;version=3.4
"In the request body, send the grant_type field with the value authorization_code. You must also set code to the authorization code string that you just received and redirect_uri to the redirect URI that you specified previously — don't use a different redirect URI."
{
"grant_type": "authorization_code",
"code": "{code}",
"redirect_uri": "{redirect_uri}"
}
Here is a snippet of code from the Customer Connector I am building. It is within this TokenMethod function that I am trying to fulfill the requirements of the table above. I am getting the sense I am not correctly placing the JSON in the body of the request, but I am stuck on what to try next:
TokenMethod = (grantType, tokenField, code) =>
let
queryString = [
grant_type = "authorization_code",
redirect_uri = redirect_uri,
client_id = client_id,
client_secret = client_secret
],
queryWithCode = Record.AddField(queryString, tokenField, code),
authKey = "Basic " & Binary.ToText(Text.ToBinary("client_id:client_secret"),BinaryEncoding.Base64),
tokenResponse = Web.Contents(token_uri, [
Content = Text.ToBinary(Uri.BuildQueryString(queryWithCode)),
Headers = [
#"Authorization" = authKey,
#"Content-type" = "application/json",
#"Accept" = "application/vnd.vimeo.*+json;version=3.4"
],
ManualStatusHandling = {400}
]),
body = Json.Document(tokenResponse),
result = if (Record.HasFields(body, {"error", "error_description"})) then
error Error.Record(body[error], body[error_description], body)
else
body
in
result;
I'm wondering if someone could please point out where I might be going astray in the code and why I am receiving the [unsupported_grant_type] error.
Many thanks for your time!
I changed Content-Type to "application/x-www-form-urlencoded" and it worked!
I tried to make a cart for this site: https://www.off---white.com/en/IT
When I tried to send values for the params of the cart, one of this params is a token of recaptcha. I tried manually to get the token using this project 'https://github.com/Cosmo3904/Recaptcha-Harvester-V2'
When I tried to make the request I pass all params:
token = 'recaptcha_token' #(I get it manually and expires every 110s)
payload = {"variant_id": "111380", "quantity": "1", 'g-recaptcha-response': token}
s = requests.Session()
resp2 = s.post("https://www.off---white.com/en/IT/orders/populate.json",headers=headers,data=payload)
print('STATUS CODE: ' + str(resp2.status_code))
unfortunately the response is every time 401, that means unauthorised. How can I solve this?
(To the session I pass headers and cookies so the page is right configured, I checked before trying login and it works)
import cfscrape
s = requests.Session()
scraper = cfscrape.create_scraper(s)
scraper.get('https://www.off---white.com/en/IT', headers=headers)
url = 'https://www.off---white.com/en/IT/orders/populate.json'
r = scraper.post(url, data={'variant_id' : 'variant', 'quantity' : 1, 'g-recaptcha-response': token}, headers=headers)
Try with cfscrape.
I am new to nodejs as well as developing.
I am trying to get a set of data bat from a nutrition site in JSON format. If I formulate the url with my app and api keys along with criteria to paste into the browser I get a JSON data ok. When I try to send a POST request as the site asks for when the request comes back it says it cannot find the url. What it is doing is attaching ':443' to the end of the host url and like I said coming back as an error:
Error: getaddrinfo ENOTFOUND https://api.nutritionix.com/v1_1/search https://api.nutritionix.com/v1_1/search:443
What I would like to do is after the end of the url is append the 'postData'.
Here is my code:
var https = require('https');
var querystring = require('querystring');
var postData = { // Nutrionix required JSON formt
"appId":"MY_APP_KEY",
"appKey":"MY_API_KEY",
"query": "Lentils",
"fields": ["item_name", "nf_calories", "nf_serving_size_qty", "nf_serving_size_unit"],
"sort":{
"field":"score",
"order":"desc"
},
"filters":{
"item_type":"2"
}
};
console.log("This is header dta" + postData);
postBody = querystring.stringify(postData);
var post_options = {
host:"https://api.nutritionix.com/v1_1/search",
"port":"443",
method:"post",
"path":"/",
headers:{"Content-Type":"application/json",
'Content-Length': postBody.length
}
}
console.log(post_options);
var request = https.request(post_options,function(response){
return response;
});
I also am passing this data into the dev HTTP add-on in Chrome and getting back the proper response.
Any help would be appreciated.
Can you please take a look at this documentation?
It seems that you don't need to mention HTTPS
Take the port off, 443 is the default for HTTPS.
I would like to use a mail list to send SMS through a third party provider. Here is the code samples that they provide:
<%
' This simple ASP Classic code sample is provided as a starting point. Please extend your
' actual production code to properly check the response for any error statuses that may be
' returned (as documented for the send_sms API call).
username = "your_username"
password = "your_password"
recipient = "44123123123"
message = "This is a test SMS from ASP"
postBody = "username=" & Server.URLEncode(username) & "&password=" & Server.URLEncode(password) & "&msisdn=" & recipient & "&message=" & Server.URLEncode(message)
set httpRequest = CreateObject("MSXML2.ServerXMLHTTP")
httpRequest.open "POST", "http://bulksms.2way.co.za/eapi/submission/send_sms/2/2.0", false
httpRequest.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
httpRequest.send postBody
Response.Write (httpRequest.responseText)
%>
I am not sure how to do this in GAS (I am an amateur programmer really...). From googling it seems that I will need to use something like "UrlFetchApp.fetch". Any help or relevant links would be appreciated. Thanks in advance.
The function below creates a properly formatted POST. Without valid credentials, I can confirm that it gets a 200 OK HTTP response, and the server reports 23|invalid credentials (username was: your_username)|. So it looks like it should work, with the right details filled in.
I've included application/x-www-form-urlencoded for the contentType, although this is not needed because it's the default.
If you get this working with a set of test values, then the next step would be to change it to accept and use parameters - I'll leave that to you.
/*
* Sends an HTTP POST to provider, to send a SMS.
*
* #param {tbd} paramName To be determined.
*
* #return {object} Results of POST, as an object. Result.rc is the
* HTTP result, an integer, and Result.serverResponse
* is the SMS Server response, a string.
*/
function sendSMS() {
var url = "http://bulksms.2way.co.za/eapi/submission/send_sms/2/2.0";
var username = "your_username";
var password = "your_password";
var recipient = "44123123123";
var message = "This is a test SMS from ASP";
var postBody = {
"username" : encodeURIComponent(username),
"password" : encodeURIComponent(password),
"msisdn" : encodeURIComponent(recipient),
"message" : encodeURIComponent(message)
};
var options =
{
"method" : "post",
"contentType" : "application/x-www-form-urlencoded",
"payload" : postBody
};
// Fetch the data and collect results.
var result = UrlFetchApp.fetch(url,options);
var rc = result.getResponseCode(); // HTTP Response code, e.g. 200 (Ok)
var serverResponse = result.getContentText(); // SMS Server response, e.g. Invalid Credentials
debugger; // Pause if running in debugger
return({"rc" : rc, "serverResponse" : serverResponse});
}
References
Google Apps Script documentation for UrlFetchApp and HTTPResponse
When are you supposed to use escape instead of encodeURI / encodeURIComponent?