Post request with url encoded payload in gatling performance testing tool - performance

How to load test a Rest api post request which is having a body payload in "x-www-form-urlencoded" format
Following is my curl request -
curl --location --request POST 'https://<dns-test>/master-service/v1' \
--header 'business: Test' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'apiKey: testAPIKEY' \
--data-urlencode 'assertion=eyJraWQiOiGHJKJHGHJKJHGHJKJHkhHJHjhghjkhghjklkjhghjkkjhghjkjhghjkjhjkjhLU9BRVAtMjU2In0.g965X6rIIajOC_6t2NIlMnvJzmO50_UdJhUvOwkQwOw8nS8BhqUM0n4jf2lGNFJ7TICNUPmcPUhRmriA7R5W7ZjwLrplrDeyswmjUJAgUAv4ENDHgTdvswxtINuNvAxw99_NF4ccaOJJ6_BATTtTfOB7dmi7yxlFdAgtlWDD_biBbNx0PQ77-vXOTVVcuL5AYLUq6ZHuYFKIGNhFbtzwQjm1GhDvceoGf69THWyDzJKqapiM1LBZtscbvHsM9S78r8VTgdGNqTAaICzJkaigk1BXEGkvbnfghjkjhgfghjkjhgfghjklkjhgfhjklhgfhjklkhgfghjklkjhgjklkjhgklkfjklhgfjklkjhgfhjklkjhgfjklhgfgkl;ghjklhgf7gppdKbtFalcZCkNa52RqIfJO718nNqJvmjx2zgS6VkksekeJ-_znvSC0mx-LtLA4NhNbQJJRYZFUrB4cqXYteeynXEsdhc1TBojN9FmQxxeuRrTcufXNv5qKkOu4FchvDRksx43QOHxyFBq1a6vNyTLy4wYO2gtEHM1fAo8yeoqO-N2ljUjPKlgukWal59lH_W6T-axKc1YnmvRU8VH-FAtsoI283gywghBkhOgy8ZlRRX_NV8nZEBbZmU9iyB9S1I4gnRwcxBWliqs99wVy0i6o77hPynVMqm1HSS3H4FO-JoP3ng1bkQxmGcty43mquqfXXk49HJ2s1PZSjLJHQKDEGnS8qTGjM3_lKKihWIojaxb0Dvu7ktiOXmhLATc6_Op2eO-Bp4Mu4k7eccUM063PYSD3x_G_7idWpa6X7zS6QLtl8t8MF6S76ZQp56ekbe4Ygq8LlC0af-BGlnFxHJZdpAMU2tBhD0uNSKRrmntSy8IOI8dwcCUdAIni9oOI-xLht9-CdvMtAE16XPP7q8NeA7XfkYiOTI5GYzAnMnTjOOWUF-U3WaXx9-GjUIiUboMYjHN7w3LrYIeL_UmRXha07Lm-83Lbi3VGwJRteX7sdMCLXEYFWlfkgthjJyz43DhemrpiPSvI7oKn13itiAd4ThfqJIYVlAYDI29Yix78YrIbleWyK5FQELCcmY6wNJEsfzLs57Ew8PLIk6_kjutHUIyzDpChIUOZ9Xq3Bq_E8G721raHQfPuAnKxx0OjWr6UnuqGwuuwRmHsbrNW8Vht0B4ucBiDP2cjdUmv2alifXU-X3-Pw7T2INscDNbu4bXRD1zV81K4GjQl1aveMJjCgZwu-dtSo8G4ccaHKuvdGquqyShrFR49-NYjC9Sk5UMqXbnDiDDwuJNETLs6frgqEOSqzW6deujaZSEWHhhZi5PdVOPZ7SiBFanahODXw3CpBlzU181fylwpY_-puKhzFe6NSbGwsI1fWUnSFH6SEhBuzn8Vl5jf12Av1BS4BYNl9L2pY_aGdjPbF8QhD9DvPRg22vYmUUIwAYSDQd3HfhTFauxE4Pd8Tc8YQhbj5DmRlll7fbEJGZn_CZoPGNX1aKV-6mHCemUXxebMeytjRI19y4bEGR7m1oflkmvb6LR75aMJfvEkguacKSLYdbQzfnn9Z7jKXSjhc-8z8kBaB0KfUxu26NaOCiaHVMMbl42CxhONHELIMkdP4UFS_9UMCXOMjhu2pnrzVp3H6TIT8bjs3SdLEPh9aCZ1DyXMq5x_-_jG-Bsv3rxH5cB5SI-Fo_aIfOJBn82leQjeVxW72M6yJ8DaHvFTkrWQJ6Mvm_jK4-6ybqQi1FVPCCQhcZhpl_3CHHUkEIag14-5W76s228JPJO0-HE7C1Ac6qjK8x_EU_452ut4HxontfdXdIadDm2_LCShTXEMjwCrOSw4SzxY4RPLc_Z8Ai_1DejZkG0bRYyXJfDeJfr8zK1ht7RvlTPwtio1hipvGGhXZGwGX9xHJek60H0FERaJQRSlVgPC-hfDk5ylvp2XzSX8UTf2KqLR--slLf_9VpTO8DuKlN0itx-WqDWK_G30ra4AocMdjMSOtNH1DIhqPq9Zxw6pRxoVrvtJg8gmRwq2gMN5pDnMY4XrXIfYJQ.DYoUJzMcIi5uD0Hg0y-6qA' \
--data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' \
--data-urlencode 'scope=testing'```
Following is my code executing the request in Gatling -
val httpProtocol = http
.baseUrl("https://<dns-test>/master-service/v1")
.header("apiKey", "testAPIKEY")
.header("business", "test")
.header("Content-Type", "application/x-www-form-urlencoded")
.formParam("scope", "testing")
.formParam("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer")
.formParam("assertion", "eyJraWQiOiJjcnlwdC1rZXloc2dfghjkjhgfdghjklkjhgfghjkjhgnIjoiUlNBLU9BRVAtMjU2In0.g965X6rIIajOC_6t2NIlMnvJzmO50_UdJhUvOwkQwOw8nS8BhqUM0n4jf2lGNFJ7TICNUPmcPUhRmriA7R5W7ZjwLrplrDeyswmjUJAgUAv4ENDHgTdvswxtINuNvAxw99_NF4ccaOJJ6_BATTtTfOB7dmi7yxlFdAgtlWDD_biBbNx0PQ77-vXOTVVhgfdfghjhghjhghjhgijhghijhghikjhg80s174nxHTpzpvsC2S1f4DzefbarzZc-ypuXHxpwoTmi3PLLfmGZrIOTBvSHKhk23x8KFGiWLEJBe2dba1MmE_Lzwg9G5G-5qSHZtlxAbAUIDL6S_JlHqHm4ftd8rEzLRlV4ZmoE_ETeJI3cv1W_NZF31YYW81SM-bYfKlC0x0p0KLaILUjNxTcr_Cp8ydyiALNBjjXnK5IqAoLwlpQHZwh0t7yrmYFACWZRNkJQGXpqFhYO4ih-BJNBRDd5D97In90I3mM1wFP3yezRkSBNFVG7gppdKbtFalcZCkNa52RqIfJO718nNqJvmjx2zgS6VkksekeJ-_znvSC0mx-LtLA4NhNbQJJRYZFUrB4cqXYteeynXEsdhc1TBojN9FmQxxeuRrTcufXNv5qKkOu4FchvDRksx43QOHxyFBq1a6vNyTLy4wYO2gtEHM1fAo8yeoqO-N2ljUjPKlgukWal59lH_W6T-axKc1YnmvRU8VH-FAtsoI283gywghBkhOgy8ZlRRX_NV8nZEBbZmU9iyB9S1I4gnRwcxBWliqs99wVy0i6o77hPynVMqm1ghjjhghjkjhghjkjhjkjkjhLrYIeL_UmRXha07Lm-83Lbi3VGwJRteX7sdMCLXEYFWlfkgthjJyz43DhemrpiPSvI7oKn13itiAd4ThfqJIYVlAYDI29Yix78YrIbleWyK5FQELCcmY6wNJEsfzLs57Ew8PLIk6_kjutHUIyzDpChIUOZ9Xq3Bq_E8G721raHQfPuAnKxx0OjWr6UnuqGwuuwRmHsbrNW8Vht0B4ucBiDP2cjdUmv2alifXU-X3-Pw7T2INscDNbu4bXRD1zV81K4GjQl1aveMJjCgZwu-dtSo8G4ccaHKuvdGquqyShrFR49-NYjC9Sk5UMqXbnDiDDwuJNETLs6frgqEOSqzW6deujaZSEWHhhZi5PdVOPZ7SiBFanahODXw3CpBlzU181fylwpY_-puKhzFe6NSbGwsI1fWUnSFH6SEhBuzn8Vl5jf12Av1BS4BYNl9L2pY_aGdjPbF8QhD9DvPRg22vYmUUIwAYSDQd3HfhTFauxE4Pd8Tc8YQhbj5DmRlll7fbEJGZn_CZoPGNX1aKV-6mHCemUXxebMeytjRI19y4bEGR7m1oflkmvb6LR75aMJfvEkguacKSLYdbQzfnn9Z7jKXSjhc-8z8kBaB0KfUxu26NaOCiaHVMMbl42CxhONHELIMkdP4UFS_9UMCXOMjhu2pnrzVp3H6TIT8bjs3SdLEPh9aCZ1DyXMq5x_-_jG-Bsv3rxH5cB5SI-Fo_aIfOJBn82leQjeVxW72M6yJ8DaHvFTkrWQJ6Mvm_jK4-6ybqQi1FVPCCQhcZhpl_3CHHUkEIag14-5W76s228JPJO0-HE7C1Ac6qjK8x_EU_452ut4HxontfdXdIadDm2_LCShTXEMjwCrOSw4SzxY4RPLc_Z8Ai_1DejZkG0bRYyXJfDeJfr8zK1ht7RvlTPwtio1hipvGGhXZGwGX9xHJek60H0FERaJQRSlVgPC-hfDk5ylvp2XzSX8UTf2KqLR--slLf_9VpTO8DuKlN0itx-WqDWK_G30ra4AocMdjMSOtNH1DIhqPq9Zxw6pRxoVrvtJg8gmRwq2gMN5pDnMY4XrXIfYJQ.DYoUJzMcIi5uD0Hg0y-6qA")
val scn = scenario(" load test")
.exec(
http("PostRequest")
.post("/")
.check(status.in(200))
setUp(scn.inject(atOnceUsers(1)).protocols(httpProtocol))
I am getting following error:-
value formParam is not a member of io.gatling.http.protocol.HttpProtocolBuilder

The error message is pretty self explanatory: you don't define formParam on a protocol config but on an HTTP request.

Related

playframework - Can't read cookie from request

How can I get the cookie from a request in playframework?
I have the following test endpoint
def home = Action.async { implicit request =>
println(request)
println(request.session)
println(request.flash)
request.session.get("session") match {
case Some(cookie) => Future(Ok(cookie))
case None =>
Future(BadRequest(Json.obj("message" -> "missing session cookie")))
}
}
When submitting the following request:
curl 'http://local.example.com:9000/home' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Connection: keep-alive' -H 'Cookie: session=eyJhbGciOiJSUzI1NiIsImtpZCI...' -H 'Upgrade-Insecure-Requests: 1' -H 'Cache-Control: max-age=0'
I unfortunately get the "missing session cookie" response. and the following printout on the console
GET /home
Session(Map())
Flash(Map())
I don't know what I'm doing wrong. Any help is much appreciated.
Edit: I set the cookie using the following method:
def tokenLogin = Action(parse.json).async { implicit request =>
val loginRequest = request.body.validate[LoginRequest]
loginRequest.fold(
errors =>
{
println(errors)
Future(BadRequest(Json.obj("message" -> JsError.toJson(errors))))
},
request => {
println("in success")
firebaseAdminService
.createSessionCookie(request.idToken)
.map(sessionCookie =>
Ok("success")
.withNewSession
.withCookies(Cookie(name = "session", value = sessionCookie))
)
}
)
}
By default, the session cookie in Play is called "PLAY_SESSION" (configuration play.http.session.cookieName).
So, you would need to use -H "Cookie: PLAY_SESSION=..." with curl.
But note, this won't work with arbitrary data since Play uses JWT and signs the information contained in the session cookie using its crypto secret.
The only thing expected to work is using a session cookie received in a Set-Cookie header from your Play service in another request to the same service (having the same secret).
update after your edit:
When using request.session, you are accessing the session cookie, which is called PLAY_SESSION and the information stored inside it.
But, you are setting a cookie of your own. This is something else.
You can access "normal" cookies with
request.cookies.get("session")
Oh, and in case you really wanted to make use of the session cookie, you can set it like this:
Ok("success").withSession("session" -> sessionCookie)

How to get OKTA implicit response without callback (Desktop app)

Can i get okta authentication worked in Desktop applications ? Where i just want to hit okta api to get access token and other details in response ?
As per my understanding it looks for some redirect_uri which i do not have in case of desktop application. Any recommendation ?
I tried it with my web application that works fine.
with following parameters
const openIdConnectUrl = 'https://xxxx.okta.com/oauth2/default';
const clientId = 'xxxxxxxxxxxxxxxxxxx';
const redirectUri = 'http://xxxx.com/yyy/zzz';
Reqeust
curl -v -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"username": "xxxx#example.com",
"password": "xxxxxx",
"relayState": "/myapp/some/deep/link/i/want/to/return/to",
"options": {
"multiOptionalFactorEnroll": false,
"warnBeforePasswordExpired": false
}
}' "https://${yourOktaDomain}/api/v1/authn"
provides response like
{"expiresAt":"2019-11-13T06:27:03.000Z","status":"SUCCESS","sessionToken":"20111PJIKs504fXVoLs-9zf4t8YoVzMCEvlUbcnjDnPhqSk7C-YPzCL","_embedded":{"user":{"id":"xxxxxxxxxxxxxxx","passwordChanged":"2019-11-13T03:20:33.000Z","profile":{"login":"xxxxxx#gmail.com","firstName":"xxxx","lastName":"xxxx","locale":"en","timeZone":"America/Los_Angeles"}}},"_links":{"cancel":{"href":"https://dev-924234.okta.com/api/v1/authn/cancel","hints":{"allow":["POST"]}}}}
Refer the below documentation if needed.
https://developer.okta.com/docs/reference/api/authn
Although it did not serve my purpose completely. But it can help you.

curl -XPUT -H "content-type: application/json" -d '{"path":"/models/testALS.zip"}' http://localhost:65327/model has error

when calling
curl -XPUT -H "content-type: application/json" -d
'{"path":"/models/testALS.zip"}' http://localhost:65327/model
get error.
I use spark-mllib trained an als model and save the model as testALS.zip
when calling this
curl -XPUT -H "content-type: application/json" -d
'{"path":"/models/testALS.zip"}' http://localhost:65327/model
has error;
the error message is pasted below.
[ERROR] [05/10/2019 04:10:57.815] [MleapServing-akka.actor.default-dispatcher-3] [MleapResource] error with request java.util.NoSuchElementException: key not found: als at scala.collection.MapLike$class.default(MapLike.scala:228) at scala.collection.AbstractMap.default(Map.scala:59) at scala.collection.MapLike$class.apply(MapLike.scala:141) at scala.collection.AbstractMap.apply(Map.scala:59) at ml.combust.bundle.BundleRegistry.model(BundleRegistry.scala:93) at ml.combust.bundle.serializer.ModelSerializer$$anonfun$readWithModel$2.apply(ModelSerializer.scala:105)
I believe the endpoint you are using is for updating an existing, loaded model. I'm not sure which version of MLeap you are using, so here is how I would load a model:
I recommend using at least version 0.13.1.
I recommend using the spring boot server, which is on port 8080
Then, you need to load a model using POST:
curl -X POST http://localhost:8080/models \
-H 'Content-Type: application/json' \
-d '{"modelName":"airbnb", "uri":"file:/models/airbnb.model.lr.zip", "config": {"memoryTimeout": 10000, "diskTimeout": 10000}, "force": false}'

Send custom URL in telegram button bash

I wrote this code with bash for send Messages with telegram bot, now i need send the Message with a custom URL.
This is my actual code:
sendTelegram() {
curl -s \
-X POST \
https://api.telegram.org/bot$apiToken/sendMessage \
-d text="$download" \
-d chat_id=$userChatId
}
How to I can send the Message $download in a URL Button, for example:
You need to use an inline_keyboard from reply_markup and send a POST request with a JSON content type header:
curl -d '{"chat_id":7455490, "text":"pruebax", "reply_markup": {"inline_keyboard": [[{"text":"LaResistencia.co", "url": "http://laresistencia.co"}]]} }' -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$apiToken/sendMessage
Check the Telegram bot API inline_keyboard section for more info about the parameters:
https://core.telegram.org/bots/api#inlinekeyboardbutton
Please use reply_markup like this payload.

Reproduce Ajax request with cURL

I'm trying to reproduce an Ajax request with cURL but it's always failing.
The server is not seing the sent data (my_data in the examples below) at all.
curl \
--request POST \
--header 'Content-type: application/json' \
--header 'X-Requested-With: XMLHttpRequest' \
--url 'http://example.org/ajax_call' \
--data '{"my_data":"data_value"}'
I also tried:
curl \
--request POST \
--header 'Content-type: application/json' \
--header 'X-Requested-With: XMLHttpRequest' \
--url 'http://example.org/ajax_call' \
--data "my_data":"data_value"
And finally:
curl \
--request POST \
--header 'Content-type: application/json' \
--header 'X-Requested-With: XMLHttpRequest' \
--url 'http://example.org/ajax_call' \
-F "my_data=data_value"
The data is never caught by the server (Symfony in my case). I guess there is an issue with XMLHttpRequest formatting in cURL and I'm wondering if what I'm trying to do is even possible (meaning proper formatting of XMLHttpRequest object by cURL)
I crawled the net for hours and haven't found anything with data parameters so far.
Thanks for your help
EDIT
Solution found thanks to people in comment section was:
curl -v \
--header 'X-Requested-With: XMLHttpRequest' \
'http://example.org/ajax_call' \
-d my_data=data_value
All your cURL requests are valid and can be processed. In Symfony app controller, you can access to sent JSON object by method getContent() of Request object:
/**
* #Route("/ajax_call", name="some_action")
*/
public function someAction(Request $request)
{
if ('' !== $content = $request->getContent()) {
$data = json_decode($content);
// some action…
}
return new Response(null, Response::HTTP_BAD_REQUEST);
}
In developer toolbar your request look like this:

Resources