0
我試圖通過使用curl庫,從這個NDK應用程序訪問谷歌的融合服務是我的代碼:使用curl與表融合從NDK應用
jstring Java_com_AnalyticToolC_AnalyticToolActivity_JNISendData(JNIEnv* env,jobject entryObject,jstring webpageJStr,jstring loginHeaderJStr,jstring insertJStr)
{
pageInfo_t page;
CURL *curl;
CURLcode res;
char *buffer;
const jbyte *webpage;
webpage = (*env)->GetStringUTFChars(env, webpageJStr, NULL);
if (webpage == NULL) {
return NULL; /* OutOfMemoryError already thrown */
}
page.data = (char *)malloc(16 * 1024);
page.len = 0;
if (page.data)
memset(page.data, 32, 16 * 1024);
buffer = (char *)malloc(1024);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, webpage);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &page);
curl_easy_setopt(curl, CURLOPT_POST, 1);
const jbyte *insert;
insert = (*env)->GetStringUTFChars(env, insertJStr, NULL);
//post field to request
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, insert);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, sizeof(insert));
struct curl_slist *headers = NULL;
const jbyte *auth;
auth = (*env)->GetStringUTFChars(env, loginHJStr, NULL);
headers = curl_slist_append(headers, auth);
// attach headers to this request
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
(*env)->ReleaseStringUTFChars(env, webpageJStr, webpage);
if(res == 0) {
if (buffer) {
page.data[page.len < 256 ? page.len : 256] = '\0';
sprintf(buffer, "pagedata(%d): %s. done.\n", page.len, page.data);
return (*env)->NewStringUTF(env, buffer);
}
}
sprintf(buffer, "Result %d", res);
return (*env)->NewStringUTF(env, buffer);
}
else
{
return (*env)->NewStringUTF(env, "Unable to init cURL");
}
}
typedef struct pageInfo_t {
char *data;
int len;
};
static size_t HTTPData(void *buffer, size_t size, size_t nmemb, void *userData) {
int len = size * nmemb;
pageInfo_t *page = (pageInfo_t *)userData;
if (buffer && page->data && (page->len + len < (16 * 1024))) {
memcpy(&page->data[page->len], buffer, len);
page->len += len;
}
return len;
}
這些都是Android應用程序傳遞給字符串的值方法
1-webpageJStr="http://www.google.com/fusiontables/api/query"
2-loginHeaderJStr="Authorization: GoogleLogin Auth=dddnjb...."
//我有我的用戶
3-insertJStr="sql=INSERT INTO 2887732 (App_Name,Device_Model,Execute_Date) VALUES ('test','test','02/02/2011')"
中的令牌值問題是,我總是得到響應串
的「SQL paramater不能爲空錯誤400」
誰能幫助我,什麼是錯我的請求頭內容或可能是我有問題, CURL選項我在這2天內被卡住了。
非常感謝kathryn,POSTFIELDSIZE curl選項的問題,我只是評論一行,它的工作原理 – Serngawy 2012-03-06 15:00:38