Web ページへの HTTP 要求と応答を実行するために libcurl を使用しています。しかし、応答を取得するときに、完全なサーバー応答が得られません。応答行はある時点で切り捨てられます。例えば
10-25 15:53:22.264: XXX(14847): Security.8021x:true
10-25 15:53:22.264: XXX(14847): Event.AlarmInput:true
10-25 15:53:22.264: XXX(14847): Event.AlarmInput.Notification.HTTP.CGI:true
10-25 15:53:22.264: XXX(14847): Event.AlarmInput.Notification.HTTP.CGI.SingleSession:true
10-25 15:53:22.264: XXX(14847): Event.AlarmInpu .............
注: これはカスタム android ログです。出力行と混同しないでください
応答にはさらに約 10 行ありますが、現在のログには、「Event.AlarmInpu」の後に出力がないことが示されています。
curl コマンド ライン オプションを指定すると
curl http://www.google.com > output.txt
ファイル内の完全な出力行を見つけることができます。
curl コマンド ライン ツールを使用して応答を出力ファイルに移動すると、応答データ全体が表示されました。したがって、curl コマンドが応答全体を適切に取得していることに同意できます。応答全体を取得しましたが、応答がバッファー長よりも長いため、切り捨てられています。
完全な応答行を取得するためにバッファの長さを増やす方法を教えてください。
コード スニペットを以下に示します。
typedef struct pageInfo_t {
char *data;
int len;
} pageInfo_t;
static size_t HTTPData(void *buffer, size_t size, size_t nmemb, void *userData)
{
int len = size * nmemb;
pageInfo_t *page = (pageInfo_t *)userData;
page->data = realloc(page->data,page->len + len +1);
memcpy(&page->data[page->len], buffer, len);
page->len += len;
page->data[page->len] = 0;
return len;
}
//Inteface funciton that will recieve web page fom Java
jstring Java_com_samsung_jnitest_MainActivity_JNIGetWebpage( JNIEnv* env,jobject entryObject,jstring webpageJStr)
{
pageInfo_t page;
CURL *curl;
CURLcode res;
char *buffer;
int memorysize = 19189;
page.data = (char *)malloc(16 * memorysize);
page.len = 0;
if (page.data)
memset(page.data, 32, 16 * memorysize);
buffer = (char *)malloc(memorysize);
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);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
(*env)->ReleaseStringUTFChars(env, webpageJStr, webpage);
if(response_code == 200)
{
if (buffer)
{
page.data[page.len] = '\0';
sprintf(buffer, "%ld:%s \n", response_code, page.data);
return (*env)->NewStringUTF(env, buffer);
}
}
}
}
完全な応答行を保持するためにバッファ サイズを増やす方法を教えてください。
コードを複雑にしすぎている場合はお知らせください