Skip to content
This repository has been archived by the owner on Sep 26, 2022. It is now read-only.

iOS and Android handle form-uurlencoded requests differently #270

Open
kito99 opened this issue Jun 30, 2022 · 2 comments
Open

iOS and Android handle form-uurlencoded requests differently #270

kito99 opened this issue Jun 30, 2022 · 2 comments

Comments

@kito99
Copy link

kito99 commented Jun 30, 2022

Describe the bug
iOS and Android handle form-uurlencoded requests differently. I believe the intent is to require the data property to be an object when making a the request, but that's not enforced on the JavaScript side. At the iOS layer, if the data property is a string, it's sent straight though; Android, on the other hand, expects it to be an object, and throws an exception if it's not.

To Reproduce
Make a call to Http.request() like so:

const response = await Http.request(
{
  "url":"https://foo.com",
  "method":"POST",
  "headers":{"Accept":"application/json","Content-Type":"application/x-www-form-urlencoded"},
  "data":"a=b&b=c&c=d"
}

Expected behavior
The behavior should be the same on both Android and iOS. If the intention is that form requests must have data specified as an object, then both platforms should throw an exception. Otherwise, both should expect a raw string.

Smartphone (please complete the following information):

  • Device: iPhone 11 Pro
  • OS: iOS 15.5
  • Browser [Capacitor web view]
  • Simulator

Smartphone (please complete the following information):

  • Device: Android Pixel 4
  • OS: API 30
  • Browser [Capacitor web view]
  • Simulator

Additional context

Relevant Swift code:

if let strVal = try? getRequestDataAsString(body) {

Relevant Java code:

Clearly the workaround here is to just pass an object, but fixing this would save folks time!

@thomaux
Copy link

thomaux commented Sep 20, 2022

Thank you so much for reporting this issue! I have been banging my head for the last couple of days on the issue why my oauth2 flow would not complete. It was because the code exchange fails on Android, which is a form-urlencoded POST request.

Fixing the data from a string to an object does the trick. Again, thank you!

@kito99
Copy link
Author

kito99 commented Sep 20, 2022

@thomaux you're very welcome! I lost a lot of time with this one, too!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants