hoppscotch / hoppscotch

Open source API development ecosystem - https://hoppscotch.io (open-source alternative to Postman, Insomnia)
https://hoppscotch.io
MIT License
61.16k stars 4.25k forks source link

[bug]: Import cUrl failed #3967

Open AlexNeAuto opened 2 months ago

AlexNeAuto commented 2 months ago

Is there an existing issue for this?

Current behavior

When i try to import cUrl with escape symbols curl -X POST 'https://example.com' -H "User-Agent: loadmill/v9.92.0" -H "content-type: application/json" -d "{ \"API_KEY\": \"api_key\", \"API_SECRET\": \"secret\", \"Device\": {\"id\": \"1234567890\"} ,\"messageIds\": [\"message_1234567890\"], \"action\": \"accept\", \"raw\": \"{ \\\"test\\\": \\\"test\\\"}\" }" i've doesn't get any error message, but if i cover safeParseJSOn function from ImportCurl component by try catch the error message is

Screenshot 2024-04-08 at 17 14 13
Error SyntaxError: Unterminated string in JSON at position 173 (line 1 column 174)
    at JSON.parse (<anonymous>)
    at json.ts:17:25
    at Module.tryCatch (chunk-7GXFONRI.js?v=4d8dafc1:400:18)
    at safeParseJSON (json.ts:15:5)
    at chunk-N5YTPUBR.js?v=4d8dafc1:144:25
    at parseBody (contentParser.ts:192:21)
    at body.ts:46:11
    at chunk-7GXFONRI.js?v=4d8dafc1:222:25
    at chunk-N5YTPUBR.js?v=4d8dafc1:259:19
    at pipe (chunk-N5YTPUBR.js?v=4d8dafc1:212:14)

I guess the problem is somewhere in FE side, it's serialized string again and i got something like this: "curl -X POST 'https://example.com' -H \"User-Agent: loadmill/v9.92.0\" -H \"content-type: application/json\" -d \"{ \\\"API_KEY\\\": \\\"api_key\\\", \\\"API_SECRET\\\": \\\"secret\\\", \\\"Device\\\": {\\\"id\\\": \\\"1234567890\\\"} ,\\\"messageIds\\\": [\\\"message_1234567890\\\"], \\\"action\\\": \\\"accept\\\", \\\"raw\\\": \\\"{ \\\\\\\"test\\\\\\\": \\\\\\\"test\\\\\\\"}\\\" }\""

Steps to reproduce

Import cUrl curl -X POST 'https://example.com' -H "User-Agent: loadmill/v9.92.0" -H "content-type: application/json" -d "{ \"API_KEY\": \"api_key\", \"API_SECRET\": \"secret\", \"Device\": {\"id\": \"1234567890\"} ,\"messageIds\": [\"message_1234567890\"], \"action\": \"accept\", \"raw\": \"{ \\\"test\\\": \\\"test\\\"}\" }"

Environment

Production

Version

Self-hosted

shipko commented 2 months ago

Hi! I confirmed this bug. Also I can add another failed use case.

curl -X POST 'http://example.com:30101/api?external_postprocessing=true' -F 'images=@"/C:/test2.png"' -F 'metadata="{\"application\": \"app\", \"sessionId\": \"559b9fad-5dd2-4bd8-a071-6f07b7bbb7b3\"}";type=application/json'

Parameter metadata is not imported as json object, because not to checked type args.

AlexNeAuto commented 2 months ago

@shipko is there will be any actions from the team about this issue?

liyasthomas commented 2 months ago

We'll get this issue fixed in the next immediate release candidate. Could you subscribe to this issue thread to get notified once the fix is live?

Meanwhile, if anyone would like to try this, feel free to open up a PR.

shipko commented 2 months ago

@liyasthomas I want to try fix this issue. But when I started a solving the problem I noticed that the problem lies in the yargs-parser/browser library. After parse @AlexNeAuto curl command I get "{ \"API_KEY\": \"api_key\", \"API_SECRET\": \"secret\", \"Device\": {\"id\": \"1234567890\"} ,\"messageIds\": [\"message_1234567890\"], \"action\": \"accept\", \"raw\": \"{ value of d parameter.

Also we have another failed curl command: curl -X POST 'http://example.com:30101/api?external_postprocessing=true' -F 'images=@"/C:/test2.png"' -F 'metadata="{\"application\": \"app\", \"sessionId\": \"559b9fad-5dd2-4bd8-a071-6f07b7bbb7b3\"}";type=application/json'

And another issue https://github.com/hoppscotch/hoppscotch/issues/3901

I think this library is not suitable for us. A curl contains a lot of arguments with subtle logic, you can't just parse the arguments here.

Maybe we should start looking for an alternative library?