2 kornberg fresnel kornberg_fresnel 于 2016.05.08 23:13 提问

OkHttp使用post方式提交multipart/form-data 5C

之前使用HttpClient,但是由于AS的问题,放弃了,改用OkHttp,但还是出现提交了表单但是没有出现正常的成功跳转,
同时返回状态码却是200 OK;还有就是,我的post方法指定的url是一个get方式提交数据的url,然后在这个url的基础上
再提交post数据,截图如下:

这是multipart/form-data:
图片说明

这是我的代码:

图片说明

5个回答

caozhy
caozhy   Ds   Rxr 2016.05.08 23:15

建议你和浏览器提交的比较下,特殊字符用base64转码下。

kornberg_fresnel
kornberg_fresnel 为什么要用base64转码,我参照stack overflow上面写的。。
大约 2 年之前 回复
kornberg_fresnel
kornberg_fresnel   2016.05.08 23:32

这是stack overflow上面的写法,附上参照数据:

图片说明

l_vaule
l_vaule   2016.05.09 00:26

他返回的状态码是多少

l_vaule
l_vaule 回复kornberg_fresnel: 你看看我给你发的文章呗,模仿着来我不相信搞不定的。
大约 2 年之前 回复
kornberg_fresnel
kornberg_fresnel 中间搁置了几天。response却是200 ok,似乎回应了我的cookie,你看看:Request request = new Request.Builder().url("http://192.168.1.1/cgi-bin/luci/" + stoke + "/admin/guide/").header("Connection", "keep-alive").addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8").addHeader("Content-Type","multipart/form-data; boundary=----WebKitFormBoundaryy5MZpl0mcqPZCYZT").addHeader("User-Agent", userAgent) .addHeader("Cookie", cookie) .post(requestBody).build();
大约 2 年之前 回复
l_vaule
l_vaule 我去,,你还没搞好啊。。。
大约 2 年之前 回复
kornberg_fresnel
kornberg_fresnel 我换了使用cookie的方式,同时post表单,但还是不行。
大约 2 年之前 回复
l_vaule
l_vaule 哦,我记起来了,你用的okhttp应该给call加个监听,等他返回之后会回调请求成功的方法而不应该这样直接去拿返回值。不知道你这种写法在哪找的,你可以参照这篇文章改一下(不知道你下面贴上httpClient的代码意图是什么)http://blog.csdn.net/lmj623565791/article/details/47911083
大约 2 年之前 回复
kornberg_fresnel
kornberg_fresnel 会不会是我先使用了一个get方式传递数据的url,导致post方法没法用了?
大约 2 年之前 回复
kornberg_fresnel
kornberg_fresnel 200
大约 2 年之前 回复
ONGYUNHAI
ONGYUNHAI   2016.05.10 10:17

图片说明
你这里把参数放在路径里了

kornberg_fresnel
kornberg_fresnel 回复沉默的雄鹰: 这是一个cookie值,后来解决了,谢谢,而且那是一个分号,哈哈
大约 2 年之前 回复
ONGYUNHAI
ONGYUNHAI 你的地址写的也太随心所欲了
大约 2 年之前 回复
ONGYUNHAI
ONGYUNHAI 而且还有个冒号
大约 2 年之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.05.23 15:42

OKhttp有这种bug?你可以试试Volley

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
OKhttp3实现multipart/form-data上传
      上周在做项目的时候遇到了表单上传图片的问题,以前的项目中上传图片有用到通过base64转成String类型上传的,用表单上传的方式还没遇到过。然后就去网上百度了一番,找到了一个比较好的方法,给记录下来。转载至:https://blog.csdn.net/android_freshman/article/details/51910937      然后接着我们遇到的第二个问题,现在很多都...
okhttp post 上传文件以及Multipart/form-data 的学习理解
在app 中,最基本的设置用户头像,需要进行头像的图片上传,那就会使用到 post 进行上传文件的操作。必然要了解下 Multipart/form-data 的含义。以前在写这部分代码的时候,不理解问什么Headers.of(xxx),而且 里面填写的格式又有什么要求等。看到上面的api 的说明文档更是头大,所以需要了解下 Multipart/form-data1.Multipart/form-da
okhttp常规用法和上传文件(multipart/form-data的学习)
okhttp常规用法 try { OkHttpClient client=new OkHttpClient(); /** * 上传文件格式 */ /*RequestBody fileBody = RequestBody.create(MediaTy
Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传
Android HTTP multipart/form-data 请求协议信息实现图片上传
问题: Android应用中,当遇到填写用户信息、发表评论等操作,不可避免会遇到“form表单操作”(类似web form操作)上传图片的功能。 在这种情况下,使用Android的HTTPConnection/ ApacheHTTP 通过POST 和GET的方式就实现不了。 解决方法: Android客户端通过模拟 HTTP multipart/form-data 请求协议信息实现图片
提交multipart/form-data类型数据
提交multipart/form-data类型数据 举例:工行签名证书上传保存 说明:框架使用的是spring mvc 4,接口测试工具使用postman,本文要实现的功能有: 文件上传 :文件上传信息填写在form-data区域,字段名即文件名,文件内容通过postman控件选择,存储在mysql数据库中类型为BLOB,对
Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下:                     提交时会向服务器端发出这样的数据(已经去除部分不相关的头信息),数据如下:   POST / HTTP/1.1
multipart/form-data post 方法提交表单,后台获取不到数据
multipart/form-data post 方法提交表单,后台获取不到数据 这个和servlet容器有关系,比如tomcat等。  1.get方式  get方式提交的话,表单项都保存在http header中,格式是  http://localhost:8080/hello.do?name1=value1&name2=value2这样的字符串。server端通
HttpClient:模拟表单提交文件,发送multipart/form-data数据
httpclient模拟 表单上传文件提交
Http multipart/form-data多参数Post方式上传数据
关于multipart/form-data格式的上传,网上有大量的解决文章,这里,我们使用HttpURLConnection 来完成 感谢以下文章作者提供的解决方法 http://www.cnblogs.com/zyzl/p/4526914.html http://topmanopensource.iteye.com/blog/1605238这里,我们碰到的问题主要是如何上传一个文件,同时