当表单数据中的任何地方存在“ =”字符时,iOS上带有表单数据的HTTP Post会呈现不完整的请求正文

时间:2019-02-21 21:09:25

标签: ionic-framework ionic-native ionic-native-http

环境信息: cli软件包:

@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

全局软件包:

cordova (Cordova CLI) : 8.1.2 (cordova-lib@8.1.1) 

本地软件包:

@ionic/app-scripts : 3.1.8
Cordova Platforms  : ios 4.5.5
Ionic Framework    : ionic-angular 3.9.2

系统:

ios-sim : 6.1.2
Node    : v10.12.0
Npm     : 6.4.1
OS       : macOS High Sierra
Xcode  : Xcode 9.4 Build version 9F1027a 

相关插件:

cordova-plugin-advanced-http 1.11.1
cordova-plugin-ionic-webview 1.2.1

@angular/http 5.0.3
@ionic-native/http 4.5.3
ionic-native-http-connection-backend 4.0.3

我们正尝试使用http.post将某些表单数据作为json发送。当该json中的任何字符串包含“ =”字符时,http.post似乎在处理它。另一端的服务器只接收邮件正文,直到“ =”字符为止。

此问题仅在ios上发生;我们的android,chrome和Windows可以毫无问题地构建所有功能。我们怀疑这与仅在ios上起作用的cordova-plugin-ionic-webview和cordova-plugin-advanced-http插件以及ionic-native-http-connection-backend的组合密切相关。我们更新了应用程序,以使用webview插件解决一些性能问题。但是,切换到该库后,我们发现它破坏了每个网络事务,并带有CORS问题和其他问题,最终使我们不得不使用此故障单中提到的其他库。

这是我们的http邮政编码小时的简化示例:

从“ @ angular / http”导入{标头,Http,RequestOptions,URLSearchParams};

....

  const post_payload = {
    parameter: 'example = string'
  };
  const data = new URLSearchParams();
  data.append('post', JSON.stringify(post_payload));
  const options = new RequestOptions({
    headers: headers,
    withCredentials: true
  });
  this.http.post('https://example.url', data.toString(), options)
  .subscribe(response => {
    //handle response
  }, (error) => {
    //handle error
  });

发布请求完成,但是发布正文呈现为: {post:{parameter:‘example

我们还尝试了将post_payload直接添加到data.append()中,我们尝试了完全放弃URLSearchParams(),仅在字符串化之后直接添加了post_payload对象,并且还尝试了发送数据对象没有toString()。

这是我们的app.module.ts的样子:

从'@ angular / http'导入{HttpModule,JsonpModule}; 从'ionic-native-http-connection-backend'导入{NativeHttpFallbackD,NativeHttpModuleD}; 从'@ angular / http'导入{Http,RequestOptions};

...

提供者:[   日期选择器,   状态栏,   开机画面   设备,   {提供:ErrorHandler,useClass:IonicErrorHandler},   相机,   CameraPreview,   文件,   文件路径,   文件传输,   MediaCapture,   {提供:Http,useClass:Http,deps:[NativeHttpFallbackD,RequestOptions]} ]

我尝试将所有相关的插件和库更新为最新版本。我尝试删除ionic-native-http-connection-backend(但是这会导致很多CORS问题,并导致http调用不与文件传输插件共享cookie,该文件传输插件本身因被阻塞而被替换,因为我们无法获取blob数据传输到功能)。

现在我迷茫了,可以继续寻找。我们的Android和Windows版本根本没有在app.module.ts中包含底部的“ provide”行,并且这些帖子可以正常工作,这使我们相信这是ionic-native-http-connection-backend库,导致了问题。但是,我们无法删除该库,因为当我们使用cordova-plugin-ionic-webview时,这似乎是唯一使我们的CORS请求成功的方法,目前这是一项艰巨的要求。

0 个答案:

没有答案