Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cURL和本机Android NDK的简单名称/内容多部分/formdata http post会导致CURLE\u BAD\u函数参数_Android_C_Curl_Android Ndk - Fatal编程技术网

使用cURL和本机Android NDK的简单名称/内容多部分/formdata http post会导致CURLE\u BAD\u函数参数

使用cURL和本机Android NDK的简单名称/内容多部分/formdata http post会导致CURLE\u BAD\u函数参数,android,c,curl,android-ndk,Android,C,Curl,Android Ndk,实现一个部分为本机的应用程序,该应用程序使用curlHTTPPOST根据post负载的内容检索数据。 代码是用C语言编写的。Android本机应用程序的目标是: compileSdkVersion = 23 minSdkVersion.apiLevel = 15 targetSdkVersion.apiLevel = 22 cURL调用的顺序如下所示: curlHandle = curl_easy_init(); curl_easy_setopt(curlHandle, CURLOPT_ERR

实现一个部分为本机的应用程序,该应用程序使用curlHTTPPOST根据post负载的内容检索数据。 代码是用C语言编写的。Android本机应用程序的目标是:

compileSdkVersion = 23
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 22
cURL调用的顺序如下所示:

curlHandle = curl_easy_init();
curl_easy_setopt(curlHandle, CURLOPT_ERRORBUFFER, curlErrorBuf);
curl_formadd(&post, &last,
             CURLFORM_COPYNAME, "version",
             CURLFORM_COPYCONTENTS, "1",
             CURLFORM_END);
curl_easy_setopt(curlHandle, CURLOPT_URL, SEARCH_POST_URL)
curl_easy_setopt(curlHandle, CURLOPT_WRITEFUNCTION, receiveHTTP)
curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA, NULL)
curl_easy_setopt(curlHandle, CURLOPT_HTTPPOST, post)
curl_easy_perform(curlHandle)
检查所有返回值是否存在调用错误。curl\u easy\u perform()调用返回唯一的错误:

ret == 43 (obviously != CURLE_OK),
curl_easy_strerror(returned value by curl_easy_perform()) == "Error",
curlErrorBuf, set by CURLOPT_ERRORBUFFER option == ""
记录的cURL错误:CURLE\u BAD\u函数\u参数,(43),“内部错误。使用错误参数调用函数。”

使用时会出现相同的错误:

https and calling curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYPEER, 0L)
or
http and not setting CURLOPT_SSL_VERIFYPEER to 0L
我可以通过不包括一个或多个简单的curl\u formadd(CURLFORM\u COPYNAME,CURLFORM\u COPYCONTENTS)调用(基本上,不向http post请求添加一个或多个multipart/formdata字段)来成功完成http和https请求


我开始认为,当我部署到运行安卓6.0.1和5.1.1(棒棒糖MR1)的手机设备上时,cURL post崩溃了。我发现curl通话在运行安卓6.0.1(m)的三星手机上失败,但在运行5.1.1(棒棒糖MR1)的Nexus手机上有效。这似乎与何时为64位体系结构设备构建和部署cURL有关。

在arm64-v8a设备体系结构上运行时,我也遇到了同样的问题。 原因是,我用了curl_config.h

#define SIZEOF_SIZE_T           4
这对于64位显然是错误的

我的解决方案:添加

GLOBAL_CFLAGS += -DARCH_$(subst -,_,$(TARGET_ARCH_ABI))
到Android.mk 并在curl\u config.h中定义条件大小:

#if defined(ARCH_arm64_v8a) || defined(ARCH_x86_64)
#   define SIZEOF_SIZE_T           8
#elif defined(ARCH_armeabi_v7a) || defined(ARCH_x86)
#   define SIZEOF_SIZE_T           4
#else
#   error "Can't detect 32/64 architechture: ARCH_<architechture> not defined."
#endif
#如果已定义(ARCH_arm64_v8a)|已定义(ARCH_x86_64)
#定义大小\u大小\u T 8
#elif已定义(ARCH_armeabi_v7a)|已定义(ARCH_x86)
#定义SIZEOF_SIZE_T 4
#否则
#错误“无法检测32/64架构:未定义架构。”
#恩迪夫

在arm64-v8a设备架构上运行时,我遇到了相同的问题。 原因是,我用了curl_config.h

#define SIZEOF_SIZE_T           4
这对于64位显然是错误的

我的解决方案:添加

GLOBAL_CFLAGS += -DARCH_$(subst -,_,$(TARGET_ARCH_ABI))
到Android.mk 并在curl\u config.h中定义条件大小:

#if defined(ARCH_arm64_v8a) || defined(ARCH_x86_64)
#   define SIZEOF_SIZE_T           8
#elif defined(ARCH_armeabi_v7a) || defined(ARCH_x86)
#   define SIZEOF_SIZE_T           4
#else
#   error "Can't detect 32/64 architechture: ARCH_<architechture> not defined."
#endif
#如果已定义(ARCH_arm64_v8a)|已定义(ARCH_x86_64)
#定义大小\u大小\u T 8
#elif已定义(ARCH_armeabi_v7a)|已定义(ARCH_x86)
#定义SIZEOF_SIZE_T 4
#否则
#错误“无法检测32/64架构:未定义架构。”
#恩迪夫