1*6236dae4SAndroid Build Coastguard Worker--- 2*6236dae4SAndroid Build Coastguard Workerc: Copyright (C) Daniel Stenberg, <[email protected]>, et al. 3*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl 4*6236dae4SAndroid Build Coastguard WorkerTitle: CURLOPT_POSTFIELDS 5*6236dae4SAndroid Build Coastguard WorkerSection: 3 6*6236dae4SAndroid Build Coastguard WorkerSource: libcurl 7*6236dae4SAndroid Build Coastguard WorkerSee-also: 8*6236dae4SAndroid Build Coastguard Worker - CURLOPT_COPYPOSTFIELDS (3) 9*6236dae4SAndroid Build Coastguard Worker - CURLOPT_MIMEPOST (3) 10*6236dae4SAndroid Build Coastguard Worker - CURLOPT_POSTFIELDSIZE (3) 11*6236dae4SAndroid Build Coastguard Worker - CURLOPT_READFUNCTION (3) 12*6236dae4SAndroid Build Coastguard Worker - CURLOPT_UPLOAD (3) 13*6236dae4SAndroid Build Coastguard WorkerProtocol: 14*6236dae4SAndroid Build Coastguard Worker - HTTP 15*6236dae4SAndroid Build Coastguard Worker - MQTT 16*6236dae4SAndroid Build Coastguard WorkerAdded-in: 7.1 17*6236dae4SAndroid Build Coastguard Worker--- 18*6236dae4SAndroid Build Coastguard Worker 19*6236dae4SAndroid Build Coastguard Worker# NAME 20*6236dae4SAndroid Build Coastguard Worker 21*6236dae4SAndroid Build Coastguard WorkerCURLOPT_POSTFIELDS - data to POST to server 22*6236dae4SAndroid Build Coastguard Worker 23*6236dae4SAndroid Build Coastguard Worker# SYNOPSIS 24*6236dae4SAndroid Build Coastguard Worker 25*6236dae4SAndroid Build Coastguard Worker~~~c 26*6236dae4SAndroid Build Coastguard Worker#include <curl/curl.h> 27*6236dae4SAndroid Build Coastguard Worker 28*6236dae4SAndroid Build Coastguard WorkerCURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata); 29*6236dae4SAndroid Build Coastguard Worker~~~ 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Worker# DESCRIPTION 32*6236dae4SAndroid Build Coastguard Worker 33*6236dae4SAndroid Build Coastguard WorkerPass a char pointer as parameter, pointing to the data buffer to use in an 34*6236dae4SAndroid Build Coastguard WorkerHTTP POST operation or an MQTT subscribe. The data must be formatted and 35*6236dae4SAndroid Build Coastguard Workerencoded the way you want the server to receive it. libcurl does not convert or 36*6236dae4SAndroid Build Coastguard Workerencode it in any way. For example, a web server may assume that this data is 37*6236dae4SAndroid Build Coastguard WorkerURL encoded. 38*6236dae4SAndroid Build Coastguard Worker 39*6236dae4SAndroid Build Coastguard WorkerThe data pointed to is NOT copied by the library: as a consequence, it must be 40*6236dae4SAndroid Build Coastguard Workerpreserved by the calling application until the associated transfer finishes. 41*6236dae4SAndroid Build Coastguard WorkerThis behavior can be changed (so libcurl does copy the data) by instead using 42*6236dae4SAndroid Build Coastguard Workerthe CURLOPT_COPYPOSTFIELDS(3) option. 43*6236dae4SAndroid Build Coastguard Worker 44*6236dae4SAndroid Build Coastguard WorkerThis POST is a normal **application/x-www-form-urlencoded** kind (and libcurl 45*6236dae4SAndroid Build Coastguard Workersets that Content-Type by default when this option is used), which is commonly 46*6236dae4SAndroid Build Coastguard Workerused by HTML forms. Change Content-Type with CURLOPT_HTTPHEADER(3). 47*6236dae4SAndroid Build Coastguard Worker 48*6236dae4SAndroid Build Coastguard WorkerYou can use curl_easy_escape(3) to URL encode your data, if 49*6236dae4SAndroid Build Coastguard Workernecessary. It returns a pointer to an encoded string that can be passed as 50*6236dae4SAndroid Build Coastguard Worker*postdata*. 51*6236dae4SAndroid Build Coastguard Worker 52*6236dae4SAndroid Build Coastguard WorkerUsing CURLOPT_POSTFIELDS(3) implies setting CURLOPT_POST(3) to 1. 53*6236dae4SAndroid Build Coastguard Worker 54*6236dae4SAndroid Build Coastguard WorkerIf CURLOPT_POSTFIELDS(3) is explicitly set to NULL then libcurl gets the POST 55*6236dae4SAndroid Build Coastguard Workerdata from the read callback. To send a zero-length (empty) POST, set 56*6236dae4SAndroid Build Coastguard WorkerCURLOPT_POSTFIELDS(3) to an empty string, or set CURLOPT_POST(3) to 1 and 57*6236dae4SAndroid Build Coastguard WorkerCURLOPT_POSTFIELDSIZE(3) to 0. 58*6236dae4SAndroid Build Coastguard Worker 59*6236dae4SAndroid Build Coastguard Workerlibcurl assumes this option points to a null-terminated string unless you also 60*6236dae4SAndroid Build Coastguard Workerset CURLOPT_POSTFIELDSIZE(3) to specify the length of the provided data, which 61*6236dae4SAndroid Build Coastguard Workerthen is strictly required if you want to send off null bytes included in the 62*6236dae4SAndroid Build Coastguard Workerdata. 63*6236dae4SAndroid Build Coastguard Worker 64*6236dae4SAndroid Build Coastguard WorkerUsing POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header, 65*6236dae4SAndroid Build Coastguard Workerand libcurl adds that header automatically if the POST is either known to be 66*6236dae4SAndroid Build Coastguard Workerlarger than 1MB or if the expected size is unknown. You can disable this 67*6236dae4SAndroid Build Coastguard Workerheader with CURLOPT_HTTPHEADER(3) as usual. 68*6236dae4SAndroid Build Coastguard Worker 69*6236dae4SAndroid Build Coastguard WorkerTo make **multipart/formdata** posts, check out the 70*6236dae4SAndroid Build Coastguard WorkerCURLOPT_MIMEPOST(3) option combined with curl_mime_init(3). 71*6236dae4SAndroid Build Coastguard Worker 72*6236dae4SAndroid Build Coastguard WorkerUsing this option multiple times makes the last set pointer override the 73*6236dae4SAndroid Build Coastguard Workerprevious ones. Set it to NULL to disable its use again. 74*6236dae4SAndroid Build Coastguard Worker 75*6236dae4SAndroid Build Coastguard Worker# DEFAULT 76*6236dae4SAndroid Build Coastguard Worker 77*6236dae4SAndroid Build Coastguard WorkerNULL 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker# %PROTOCOLS% 80*6236dae4SAndroid Build Coastguard Worker 81*6236dae4SAndroid Build Coastguard Worker# EXAMPLE 82*6236dae4SAndroid Build Coastguard Worker 83*6236dae4SAndroid Build Coastguard Worker~~~c 84*6236dae4SAndroid Build Coastguard Worker/* send an application/x-www-form-urlencoded POST */ 85*6236dae4SAndroid Build Coastguard Workerint main(void) 86*6236dae4SAndroid Build Coastguard Worker{ 87*6236dae4SAndroid Build Coastguard Worker CURL *curl = curl_easy_init(); 88*6236dae4SAndroid Build Coastguard Worker if(curl) { 89*6236dae4SAndroid Build Coastguard Worker const char *data = "data to send"; 90*6236dae4SAndroid Build Coastguard Worker 91*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); 92*6236dae4SAndroid Build Coastguard Worker 93*6236dae4SAndroid Build Coastguard Worker /* size of the POST data if strlen() is not good enough */ 94*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L); 95*6236dae4SAndroid Build Coastguard Worker 96*6236dae4SAndroid Build Coastguard Worker /* pass in a pointer to the data - libcurl does not copy */ 97*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data); 98*6236dae4SAndroid Build Coastguard Worker 99*6236dae4SAndroid Build Coastguard Worker curl_easy_perform(curl); 100*6236dae4SAndroid Build Coastguard Worker } 101*6236dae4SAndroid Build Coastguard Worker 102*6236dae4SAndroid Build Coastguard Worker /* send an application/json POST */ 103*6236dae4SAndroid Build Coastguard Worker curl = curl_easy_init(); 104*6236dae4SAndroid Build Coastguard Worker if(curl) { 105*6236dae4SAndroid Build Coastguard Worker const char *json = "{\"name\": \"daniel\"}"; 106*6236dae4SAndroid Build Coastguard Worker struct curl_slist *slist1 = NULL; 107*6236dae4SAndroid Build Coastguard Worker slist1 = curl_slist_append(slist1, "Content-Type: application/json"); 108*6236dae4SAndroid Build Coastguard Worker slist1 = curl_slist_append(slist1, "Accept: application/json"); 109*6236dae4SAndroid Build Coastguard Worker 110*6236dae4SAndroid Build Coastguard Worker /* set custom headers */ 111*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist1); 112*6236dae4SAndroid Build Coastguard Worker 113*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); 114*6236dae4SAndroid Build Coastguard Worker 115*6236dae4SAndroid Build Coastguard Worker /* pass in a pointer to the data - libcurl does not copy */ 116*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json); 117*6236dae4SAndroid Build Coastguard Worker 118*6236dae4SAndroid Build Coastguard Worker curl_easy_perform(curl); 119*6236dae4SAndroid Build Coastguard Worker } 120*6236dae4SAndroid Build Coastguard Worker} 121*6236dae4SAndroid Build Coastguard Worker~~~ 122*6236dae4SAndroid Build Coastguard Worker 123*6236dae4SAndroid Build Coastguard Worker# %AVAILABILITY% 124*6236dae4SAndroid Build Coastguard Worker 125*6236dae4SAndroid Build Coastguard Worker# RETURN VALUE 126*6236dae4SAndroid Build Coastguard Worker 127*6236dae4SAndroid Build Coastguard WorkerReturns CURLE_OK 128