iOS multipart/form-data请求方式

2021-02-24  本文已影响0人  小心韩国人

最近项目中有一个接口比较奇特,之前从来没有见过这种请求方式.需求是搜集日志,写到本地文件夹中,然后把log文件上传到服务器.
接口是POST请求方式,但是既需要GET参数,同时也需要POST参数.
GET参数很简单,直接接把参数拼接到URL后面就好了.难就难在multipart/form-data这种表单的传参方式,很是繁琐,错一点点就请求不成功,调试了一天多才解决.

这个接口仔细需要设置两个地方:

  1. 请求头

这里有个细节千万要注意:请求头 Content-Type 中的 boundary 一定要加 " " ,我就是这里没加" "一直请求失败,也不知道哪里问题,浪费了很多时间.

所以我们在代码中要保留boundary的引号:

NSString *boundary = @"\"ajfiojsaodfioasjfokjaskdfklasjfkljas8i9q\"";
  1. 请求体

我先截一张正确的格式,然后把需要注意的点列举出来:


请求体正确配置
  1. 请求体是以 --boundray 开头结尾,这里的 boundray 不要加引号,所以在代码中需要单独准备不保留引号的 boundrary:
NSString *boundary2 = @"ajfiojsaodfioasjfokjaskdfklasjfkljas8i9q";
  1. 请求体中也需要设置 Content-Type ,因为我这里上传的是文件,所以 Content-Type 设置的是 application/octet-stream.

  2. 设置 Content-Disposition 中的 name="file" 是后台服务器要求的,必须和服务器一致, filename="**.log" 是上传的文件名,自己可以随便起.

  3. 其他的就是要注意\r\n回车换行,代码如下:

NSString *filePair = [NSString stringWithFormat:@"--%@\r\nContent-Type: %@\r\nContent-Disposition: form-data; name=%@; filename=%@\r\n\r\n",boundary2,contentType,fileKey,filename];

因为在调试这个接口的时候的确是花费了很多时间,所以抽时间记录一下.

上一篇下一篇

猜你喜欢

热点阅读