Can't understand why Google Translate REST API returns HTTP 400 - groovy

Using this camel route sending POST request to Google Translate API:
from("direct:start").
setHeader(Exchange.HTTP_METHOD, constant('POST')).
setHeader('X-HTTP-Method-Override', constant('GET')).
setBody(constant('q=Hello')).
log(LoggingLevel.INFO, 'sourcingtool', '${body}').
to("https://www.googleapis.com/language/translate/v2?key=${api_key}&target=fr").
to('stream:out')
For some reason getting HTTP 400.
Who is seeing some problem in the request?
UPDATE 1
When I'm using curl and sending similar request, everyting works like a charm:
curl -XPOST -H "X-HTTP-Method-Override:GET" --data "q=Hello" "https://www.googleapis.com/language/translate/v2?key=MY_API_KEY&target=fr"

The answer was simple. I just needed to explicitly set CONTENT_TYPE:
from("direct:start").
setHeader(Exchange.HTTP_METHOD, constant('POST')).
setHeader(Exchange.CONTENT_TYPE, constant('application/x-www-form-urlencoded')). // this one did a trick
setHeader('X-HTTP-Method-Override', constant('GET')).
setBody(constant('q=Hello')).
log(LoggingLevel.INFO, 'sourcingtool', '${body}').
to("https://www.googleapis.com/language/translate/v2?key=${api_key}&target=fr").
to('stream:out')

Related

How can I make this API call from my Nodejs program?

A member of my team developed this API where you send some numeric values and it gives you back a probability. He deployed it in Heroku and sent me the task of connecting it with our backend, you can make the call from cmd like this:
curl -d "{\"Values\":[[value1,value 2,value 3,value 4,value 5]]}" -H "Content-Type: application/json" -X POST https://apibc1.herokuapp.com/predict
And it will work just like intended, but to be honest I don't know how to make this call in my server file, I'm trying to use the request package in Node but I keep getting the invalid URI error on my logs. An example of the API working from cmd:
And this is what happens when I make the same call in my server.js file:
If you have a working curl you can import it into postman and generate a working code sample for a lot of languages.
Import the curl request
Then click the code button on the right
and select a language/framework option from the dropdown

DocuSign returning HTML from Authentication only when the application is under a domain

i'm integrating the docusign api with my angular application, everything is working good, i created a proxy configuration in order to do the api calls, im using the demo url since i have a demo developer account.
The problem is that when i run my program in local (using localhost) the authentication token is successfully returned by the oauth call but when i upload my program on an external domain the same call returns me an html with irrelevant information with status 200 OK.
I tried to search this on google but i can't find nothing good.
What should i do?
this is the error i get:
ERROR qm
error: {error: SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse ()
at XMLHtt…, text: "<!doctype html>↵↵↵ <meta ch…b0a19788ec.js" defer="">↵↵"}headers: DmlazyInit: ()=> {…}lazyUpdate: nullnormalizedNames: Map(0) {}proto: Objectmessage: "Http failure during parsing for http://frontendly.it/oauth/token"name: "HttpErrorResponse"ok: falsestatus: 200statusText: "OK"url: "http://frontendly.it/oauth/token"proto: Bm
The OAuth call you are making has a parameter called redirectUri.
Look for &redirect_uri= in the URL.
You have to change that for each location, if you put this in a domain - then you cannot use localhost in there.
This URL has to match exactly to where you deployed your application.
For the second call, make sure to make it a POST, not GET, add the headers like this: (more information)
curl --header "Authorization: Basic NWMyYjhkN.....FhODg2MQ=="
--data "grant_type=authorization_code&code=eyJ0eXAi.....QFsje43QVZ_gw"
--request POST https://account-d.docusign.com/oauth/token

csrf token in bluemix deployed node instance

Hi I used the deploy to bluemix button at the top right of this page
https://alchemy-language-demo.mybluemix.net/?cm_mc_uid=69990450306114782046823&cm_mc_sid_50200000=1478206651
to create an Alchemy language node server. It runs ok -
https://alchemylanguage-nodejs-encekxdev-216.mybluemix.net/
but when I try to post to it using postman I get the response 'internal server error'.
Checking the server logs, it seems to respond to the request with
code: 'EBADCSRFTOKEN', error: 'invalid csrf token'
Even if I try to send the csrf from the webpage version of the site, it still doesn't work.
I feel like I have missed something in the configuration of the server but don't know what. I'm not great with servers etc so sorry if this is super basic.
EDIT - I should mention I have also tried sending an apikey in the request which I got from the service credentials section in the alchemy service bit off the dashboard but the same error occurs.
EDIt - The call to the API I am making looks like this:
POST https://alchemylanguage-nodejs-encekxdev-216.mybluemix.net/api/keywords
with headers:
text: 'this is some dummy text I have made'
I have also tried adding apikey to the headers.
Thanks.
You do not POST your application, you have to POST to the API.
Here is the link with API URL and various samples:
http://www.ibm.com/watson/developercloud/alchemy-language/api/v1
For example, here is a curl request for keywords:
curl -X POST \
-d "outputMode=json" \
-d "url=http://www.twitter.com/ibmwatson" \
"https://gateway-a.watsonplatform.net/calls/url/URLGetRankedKeywords?apikey=$API_KEY"
Make sure you export $API_KEYto your environment before running the command above. You can find the $API_KEY in the AlchemyAPI instance you created in Bluemix.

Square Connect can't subscribe to webhook notifications

I am following the instructions here on setting up webhook notifications for Square payments. But when I execute the curl statement in step 5 to subscribe to my own merchant's payment notifications, I get the response:
{"type":"bad_request","message":"Request body is not an array of event types"}
The curl statement is
curl -X PUT -H "Authorization: Bearer MY_ACCESS_TOKEN" -d '{"event_types": ["PAYMENT_UPDATED"]}' https://connect.squareup.com/v1/me/webhooks
Did they update the event type names? I can't find any other documentation on webhooks.
Whoops! Thanks for catching this error in the blog post, which I have now corrected. The format of the curl previously shown in step 5 had two errors:
The request body should simply have been the array of desired event types, such as:
["PAYMENT_UPDATED"]
With no JSON object surrounding it. The correct format is also shown in the API documentation.
The request was missing a Content-Type: application/json header. All requests to Connect API endpoints require this header.
The correct request looks like this, with your personal access token substituted where indicated:
curl -X PUT -H "Authorization: Bearer PERSONAL_ACCESS_TOKEN" -H "Content-Type: application/json" -d "[\"PAYMENT_UPDATED\"]" https://connect.squareup.com/v1/me/webhooks

Instagram real time API - getting empty data and no POST request in reply

There's been some thread regarding the Instagram's realtime API, and it's remain unclear whether the fault is of Instagram or the developers that are trying to use it.
My issue is with the first subscription request. I think that my request is correct but I keep getting error \"callback_url\". URL must start with \"http://\" or \"https://\""
The request is:
curl -X POST 'httpiptions?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&object=tag&object_id=love&aspect=media&callback_url=http://myurl.com/subscribe'
Moreover, when I'm changing the request type to GET instead of POST I'm getting a successful message 200 with empty data, and Instagram do not invoke a POST request to my callback_url.
So as I see it there're 2 issues:
1) Should the request be POST( doesn't works for me) or GET( did work for me).
2) Why instagram returns empty data and do not POST to the callback_url.
It has to be a POST.
In order to successfully subscribe and receive a response from the POST you do as your subscription request, your callback URL has to do some extra work and that is to also respond to a GET request sent from Instagram, right after you send the subscription request, to verify that you are the real owner of the callbalck URL.
In summary your callback URL, beside receiving POSTs, has to also respond to a GET request and echo back the hub.challenge parameter sent in that GET request.
Review the detailed description of the process in the documentation: http://instagram.com/developer/realtime/
UPDATE:
Now I could reproduce your described error.
The problem is with your CURL call. Your are supposed to send a POST request along with appropriate POST parameters but your call is doing a POST sending parameters as GET in the URL. Actually the API should reject the whole request but it seems it partially processes the parameters.
Change the CURL to:
curl -F 'client_id=CLIENT-ID' \
-F 'client_secret=CLIENT-SECRET' \
-F 'object=user' \
-F 'aspect=media' \
-F 'verify_token=myVerifyToken' \
-F 'callback_url=http://YOUR-CALLBACK/URL' \
https://api.instagram.com/v1/subscriptions/
This does a POST and sends your parameters correctly.

Resources