当前位置: 首页 > 知识库问答 >
问题:

无法使用Java中的okHTTP多部分格式数据为我的android应用程序重新创建cURL POST请求

程俊誉
2023-03-14

我已经尝试了两天,现在了解如何复制一个curl请求,以添加一个图像到我的Craftar图像识别集合。我能够创建一个项目,但设置多部分数据代码的方法让我失败了。Craftar只提供如何发布图像文件以将其附加到集合项的cURL语句。

我尝试使用RequestB.in和Postman来查看在消息传输中可以看到的内容,但是okHTTP方法的组合似乎无法解决这个问题。我被难倒了。我尝试了“image/png”和“application/octet-stream”作为我的媒体类型。当我使用Postman发送测试请求时,RequestB.in显示了“application/octet-stream”。下面是它显示的消息信息。

下面是我试图用Java复制的cURL语句。

curl-x POST'https://my.craftar.net/api/v0/image/api_key=123456789abcdefghijk123456789abcdefghijk'-f“item=/api/v0/item/d05924dde1784787a3d6b815e2b1cd69/”-f“file=@back_cover.jpg”

下面是我的代码:

        public class OkHttpHandler extends AsyncTask<String, Void, String> {

        OkHttpClient client = new OkHttpClient();

        @Override
        protected String doInBackground(String... params) {

            File storageDir = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES);
            File file = new File("/storage/emulated/0/Pictures/BlissBotSenderImages/kaytiandkristoffer.jpg");
            RequestBody requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("item", "/api/v0/item/d05924dde1784787a3d6b815e2b1cd69/")
                    .addFormDataPart("file","kaytiandkristoffer.jpg",
                    (RequestBody.create (MEDIA_TYPE_PNG, file)))
                    .build();

            Request request = new Request.Builder()
                    .url(postImageUrl)
                    .post(requestBody)
                    .build();

            try {
                Response response = client.newCall(request).execute();
                return response.body().string();
            } catch (Exception e) {
                e.printStackTrace();
            }

以下是从邮递员成功发送邮件的请求b.详细信息:

表单/后置参数项目:/API/V0/ITEM/D05924DDE1784787A3D6B815E2B1CD69//

内容长度:3509853

总路由时间:0

CF-Connection-IP:2001:5B0:42C4:2AE8:2954:59EA:A3E8:4787

X-Request-ID:766063F7-C368-4467-B5ED-42776AC6F528

主机:requestB.in

连接:关闭

↓↓↓↓↓exifii*
δ'(1±2'nsamsungsph-l720thhl720tvpubng52015:04:05 21:22:25\d“'20220l


️bé0100 p···!üd2015:04:05 21:22:252015:04:0521:22:25äd2äd·dasciinvmu^^;ygzhxgmgum{wsx∞¾2è2å∞¾s∞¾∞¾s∞¾uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuunc-/=e7ad35iecli:p[abdvabvtizz:@hhg[eh[lz8rlln<8a=fd“gonlnztngbqqpgr_∞¾¾¾¾®fè\\)q5èèéééμ×2\j+'#️️%:pf}-®}-®。^2@e×\\'%('%$.!!$$#&*@∞®”AIEIGNRNAAD59<-4':ZD/#.BA8$$$@8JG\QGZ~{qmcy[\~rhttcioxtne^y{{r~vmxrrswu{gw{iqs~ozgvyxxffwnyyzkwwyvt{s}wz{zw~vvxsjquxykdv}jtp{}{ryy~vv}tqx{pgjsolzq~ftxrkug{sjqnw]kwlq}mssij~rzn}wu{jjjsolzq~ftxrkug{sjqnw!BB13-

(60,!%6h@eleb@6%kvj@t;04OFC4-'#$*71。;^m@ivtmf@l>dkl,:ke7<%$?mxiu®crzs/y7z/dds_wvrgt^vgpb^gtorn4%lo pécé'\\qg?noa\rl\tn;xl“e5f=h=aslojtwd\dclsvxsnxxwycg7b-xtk:cabfgfiitnw/$5)e28512*1$1g@8/bc3,4'<,12='/+-3%2,A()')&.+'6.&C?),1@/52$-%8;93(-+),#.=+%**+'6$51(@'k/,#!%+!(”#&$,+($)!%88!。-0&&$'!#+'&$(5/,);--0,2!+&0/(&)$+<&(#$'+/&'#9*#$&$'%$$!!#&/0*($$('!$&'#.1&)


共有1个答案

乔望
2023-03-14

正如有时发生的那样,问题出在别处。在这一行的某个地方,我意外地在endpoint地址中插入了一个无关的字符。我修复了这一点,上面的代码工作只是查找。

 类似资料:
  • 我刚刚安装了NetBeans 7.3.1。我只是试图创建一个新的Java应用程序,但每当我通过向导时,它会显示“Project folder exists and is not Empty”(项目文件夹存在且不是空的),不会再继续了。这是一个新项目,所以在NetBeans创建文件夹之前,文件夹是不存在的。 有什么想法吗?

  • 所以,在我的开发Mac上使用我的rails应用程序创建了一个正常工作的postgres db实例,但是随着我从头开始构建模型(即添加、删除、更改列),迁移变得难以管理,所以我决定开始清理。运行rake db: dro后,我无法通过rake db: create重新创建。我只得到以下信息: 无法为 {“适配器”= 创建数据库 我想我需要在postgres中创建用户,但是它不应该从初始设置就存在吗?

  • 问题内容: 我开始开发适用于Google Android的应用程序,并严重依赖可以通过json或xml轻松传输数据的Web API。我现在必须决定选择哪个库。 我看到google在API中包含org.json类,但尚未对其进行测试。 您的经历如何?我应该使用哪个库/ API,为什么? 问题答案: 如果您主要针对的是内部API,该内部API只是您控制的服务器和所创建的客户端之间的链接,那么我强烈建议

  • 我安装了JavaNetBeansIDE12.0和JDk-16。当我尝试使用Java和Ant创建一个项目时,它会像截图中那样被卡住。当我取消它时,它会创建文件,但其中没有代码,即没有创建main方法。只是一个空白文件。 有人知道如何解决这个问题吗?

  • 问题内容: 嗨伙计, 如何在Eclipse中创建我的应用程序的exe文件?请提及要遵循的步骤。 谢谢 问题答案: 如果您只是想知道如何在Eclipse IDE外部运行应用程序,则不需要exe。在菜单中寻找“导出JAR”选项。 如果导出正确完成(生成了MANIFEST),则应该能够通过双击JAR文件或从命令行使用“ java -jar FILENAME.jar”来运行JAR文件。请注意,这是与平台无

  • 我无法在我的应用程序中使用proguard。当我将minify启用为true时,布局屏幕中的textinputlayout工作正常,但我有一个alertdialog,其中包含一个膨胀的XML,该XML没有膨胀(该XML包含一个textinputlayout。请帮助大家。这是代码片段。 PS:我正在使用手机应用程序发帖,请不要抨击对齐不当。我真的需要帮助。 建筑渐变条目-- XML屏幕中的TextI