libcurlを使用してデータをPOSTしたいのですが、うまくいっていません。
C
1curl_easy_setopt(curl, CURLOPT_POST, 1L); 2curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data->req_data);
上記のようにすればとりあえず送ること自体はできるのですが、req_dataに1024Bを超える大きさの文字列を入れるとコアダンプになってしまいました。
そのため、READFUNCTIONというオプションを使用してみているのですが、READFUNCTIONだとデータが送信できなくなってしまいました。
C
1curl_easy_setopt(curl, CURLOPT_READFUNCTION, send_request_body); 2curl_easy_setopt(curl, CURLOPT_READDATA, data);
上記のようにコールバック関数とデータの構造体を登録しています。コールバック関数は下記のようになっています。
C
1size_t send_request_body(void *ptr, size_t size, size_t nmemb, void *userdata) 2{ 3 struct *data = userdata; 4 size_t buffer_size = size * nmemb; 5 6 if (data->req_data_len){ 7 size_t copy_this_much = data->req_data_len; 8 if (copy_this_much > buffer_size){ 9 copy_this_much = buffer_size; 10 } 11 memcpy(ptr, data->req_data, copy_this_much); 12 13 data->req_data += copy_this_much; 14 data->req_data_len -= copy_this_much; 15 return copy_this_much; 16 } 17 return 0; 18}
HTTP通信自体は成功しており、200が返ってくるのですが、POSTしたいデータはサーバまで届いておらず空のデータが届いています。
libcurlで大きなデータを送信するにはどのようにすればよいのでしょうか?
ファイルなどではなく文字列を想定しております。
ご教示いただけますと幸いです。よろしくお願いいたします。
あなたの回答
tips
プレビュー