本文整理汇总了C++中curl_easy_setopt函数的典型用法代码示例。如果您正苦于以下问题:C++ curl_easy_setopt函数的具体用法?C++ curl_easy_setopt怎么用?C++ curl_easy_setopt使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了curl_easy_setopt函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: curl_formfree
JNIEXPORT jint JNICALL Java_com_netbirdtech_libcurl_Curl_setFormdataNative
(JNIEnv* env, jobject obj, jlong handle, jobjectArray multi_array) {
Holder* holder = (Holder*) handle;
if (holder == NULL) {
return 0;
}
CURL* curl = holder->getCurl();
struct curl_httppost* post = holder->getPost();;
struct curl_httppost* last = NULL;
// clear all
if (post != NULL) {
//LOGD("clear previous form.");
curl_formfree(post);
post = NULL;
}
if (multi_array != NULL) {
CURLFORMcode code;
int len = env->GetArrayLength(multi_array);
//LOGD("set name/parts size=%d", len);
for (int i = 0; i < len; i++) {
//LOGV(".");
jobject part = env->GetObjectArrayElement(multi_array, i);
jstring name = (jstring) env->CallObjectMethod(part, MID_MultiPart_get_name);
jstring filename = (jstring) env->CallObjectMethod(part, MID_MultiPart_get_filename);
jstring content_type = (jstring) env->CallObjectMethod(part, MID_MultiPart_get_content_type);
jbyteArray content = (jbyteArray) env->CallObjectMethod(part, MID_MultiPart_get_content);
jbyte* bytes = env->GetByteArrayElements(content, 0);
int content_length = env->GetArrayLength(content);
holder->addByteArrayGlobalRefs(env->NewGlobalRef(content), (const char*)bytes); // release after perform
const char* name_str = env->GetStringUTFChars(name, 0);
// content_type and filename may be null
if (content_type == NULL && filename == NULL) {
code = curl_formadd(&post, &last,
CURLFORM_COPYNAME, name_str,
CURLFORM_BUFFER, "file.dat",
CURLFORM_BUFFERPTR, bytes,
CURLFORM_BUFFERLENGTH, content_length,
CURLFORM_END);
} else if (content_type == NULL) {
const char* filename_str = env->GetStringUTFChars(filename, 0);
code = curl_formadd(&post, &last,
CURLFORM_COPYNAME, name_str,
CURLFORM_BUFFER, filename_str,
CURLFORM_BUFFERPTR, bytes,
CURLFORM_BUFFERLENGTH, content_length,
CURLFORM_END);
env->ReleaseStringUTFChars(filename, filename_str);
} else if (filename == NULL) {
const char* content_type_str = env->GetStringUTFChars(content_type, 0);
code = curl_formadd(&post, &last,
CURLFORM_COPYNAME, name_str,
CURLFORM_BUFFER, "file.dat",
CURLFORM_CONTENTTYPE, content_type_str,
CURLFORM_BUFFERPTR, bytes,
CURLFORM_BUFFERLENGTH, content_length,
CURLFORM_END);
env->ReleaseStringUTFChars(content_type, content_type_str);
} else {
const char* filename_str = env->GetStringUTFChars(filename, 0);
const char* content_type_str = env->GetStringUTFChars(content_type, 0);
code = curl_formadd(&post, &last,
CURLFORM_COPYNAME, name_str,
CURLFORM_BUFFER, filename_str,
CURLFORM_CONTENTTYPE, content_type_str,
CURLFORM_BUFFERPTR, bytes,
CURLFORM_BUFFERLENGTH, content_length,
CURLFORM_END);
env->ReleaseStringUTFChars(filename, filename_str);
env->ReleaseStringUTFChars(content_type, content_type_str);
}
env->ReleaseStringUTFChars(name, name_str);
}
if (code != CURL_FORMADD_OK) {
////LOGW("curl_formadd error %d", code);
curl_formfree(post);
// TODO return fromadd error or setopt error?
return (int) code;
}
}
if (post != NULL) {
//LOGV("set_opt CURLOPT_HTTPPOST");
holder->setPost(post);
return curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
}
return 0;
}
开发者ID:mahongquan,项目名称:java-jni,代码行数:94,代码来源:Main.cpp
示例2: setOption
bool setOption(CURLoption option, T data)
{
return CURLE_OK == curl_easy_setopt(_curl, option, data);
}
开发者ID:253627764,项目名称:WagonWar,代码行数:4,代码来源:HttpClient.cpp
示例3: req
// blocking asset fetch which bypasses the VFS
// this is a very limited function for use by the simstate loader and other one-offs
S32 LLHTTPAssetStorage::getURLToFile(const LLUUID& uuid, LLAssetType::EType asset_type, const std::string &url, const std::string& filename, progress_callback callback, void *userdata)
{
// *NOTE: There is no guarantee that the uuid and the asset_type match
// - not that it matters. - Doug
lldebugs << "LLHTTPAssetStorage::getURLToFile() - " << url << llendl;
FILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
if (! fp)
{
llwarns << "Failed to open " << filename << " for writing" << llendl;
return LL_ERR_ASSET_REQUEST_FAILED;
}
// make sure we use the normal curl setup, even though we don't really need a request object
LLHTTPAssetRequest req(this, uuid, asset_type, RT_DOWNLOAD, url, mCurlMultiHandle);
req.mFP = fp;
req.setupCurlHandle();
curl_easy_setopt(req.mCurlHandle, CURLOPT_FOLLOWLOCATION, TRUE);
curl_easy_setopt(req.mCurlHandle, CURLOPT_WRITEFUNCTION, &curlFileDownCallback);
curl_easy_setopt(req.mCurlHandle, CURLOPT_WRITEDATA, req.mCurlHandle);
curl_multi_add_handle(mCurlMultiHandle, req.mCurlHandle);
llinfos << "Requesting as file " << req.mURLBuffer << llendl;
// braindead curl loop
int queue_length;
CURLMsg *curl_msg;
LLTimer timeout;
timeout.setTimerExpirySec(GET_URL_TO_FILE_TIMEOUT);
bool success = false;
S32 xfer_result = 0;
do
{
curl_multi_perform(mCurlMultiHandle, &queue_length);
curl_msg = curl_multi_info_read(mCurlMultiHandle, &queue_length);
if (callback)
{
callback(userdata);
}
if ( curl_msg && (CURLMSG_DONE == curl_msg->msg) )
{
success = true;
}
else if (timeout.hasExpired())
{
llwarns << "Request for " << url << " has timed out." << llendl;
success = false;
xfer_result = LL_ERR_ASSET_REQUEST_FAILED;
break;
}
} while (!success);
if (success)
{
long curl_result = 0;
curl_easy_getinfo(curl_msg->easy_handle, CURLINFO_HTTP_CODE, &curl_result);
if (curl_result == HTTP_OK && curl_msg->data.result == CURLE_OK)
{
S32 size = ftell(req.mFP);
if (size > 0)
{
// everything seems to be in order
llinfos << "Success downloading " << req.mURLBuffer << " to file, size " << size << llendl;
}
else
{
llwarns << "Found " << req.mURLBuffer << " to be zero size" << llendl;
xfer_result = LL_ERR_ASSET_REQUEST_FAILED;
}
}
else
{
xfer_result = curl_result == HTTP_MISSING ? LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE : LL_ERR_ASSET_REQUEST_FAILED;
llinfos << "Failure downloading " << req.mURLBuffer <<
" with result " << curl_easy_strerror(curl_msg->data.result) << ", http result " << curl_result << llendl;
}
}
fclose(fp);
if (xfer_result)
{
LLFile::remove(filename);
}
return xfer_result;
}
开发者ID:Nora28,项目名称:imprudence,代码行数:91,代码来源:llhttpassetstorage.cpp
示例4: main
int main(void)
{
CURL *curl;
CURLcode res;
struct WriteThis pooh;
pooh.readptr = data;
pooh.sizeleft = strlen(data);
curl = curl_easy_init();
if(curl) {
/* First set the URL that is about to receive our POST. */
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/index.cgi");
/* Now specify we want to POST data */
curl_easy_setopt(curl, CURLOPT_POST, 1L);
/* we want to use our own read function */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
/* pointer to pass to our read function */
curl_easy_setopt(curl, CURLOPT_READDATA, &pooh);
/* get verbose debug output please */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
/*
If you use POST to a HTTP 1.1 server, you can send data without knowing
the size before starting the POST if you use chunked encoding. You
enable this by adding a header like "Transfer-Encoding: chunked" with
CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must
specify the size in the request.
*/
#ifdef USE_CHUNKED
{
struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked");
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
/* use curl_slist_free_all() after the *perform() call to free this
list again */
}
#else
/* Set the expected POST size. If you want to POST large amounts of data,
consider CURLOPT_POSTFIELDSIZE_LARGE */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, pooh.sizeleft);
#endif
#ifdef DISABLE_EXPECT
/*
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue"
header. You can disable this header with CURLOPT_HTTPHEADER as usual.
NOTE: if you want chunked transfer too, you need to combine these two
since you can only set one list of headers with CURLOPT_HTTPHEADER. */
/* A less good option would be to enforce HTTP 1.0, but that might also
have other implications. */
{
struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Expect:");
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
/* use curl_slist_free_all() after the *perform() call to free this
list again */
}
#endif
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
开发者ID:lufik,项目名称:curl,代码行数:76,代码来源:post-callback.c
示例5: oc_curl_debug
void
oc_curl_debug(OCstate* state)
{
curl_easy_setopt(state->curl,CURLOPT_VERBOSE,1);
curl_easy_setopt(state->curl,CURLOPT_ERRORBUFFER,(void*)state->curlerror);
}
开发者ID:SiggyF,项目名称:netcdf-c,代码行数:6,代码来源:occurlfunctions.c
示例6: Get_a_URL
bool Get_a_URL (_String& urls, _String* fileName)
{
#ifdef __HYPHYCURL__
CURL *curl;
CURLcode res ;
curl = curl_easy_init ();
FILE * f = nil;
_String* s = nil;
char cErr [CURL_ERROR_SIZE+1];
if(curl)
{
if (fileName)
{
f = fopen (fileName->sData,"wb");
if (!f)
{
urls = _String ("Failed to open ") & *fileName & " for writing";
return false;
}
}
else
{
s = new _String (8192, true);
checkPointer (s);
}
curl_easy_setopt (curl, CURLOPT_URL, urls.sData );
curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, cErr);
if (f)
curl_easy_setopt (curl, CURLOPT_FILE, (void*)f);
else
curl_easy_setopt (curl, CURLOPT_FILE, (void*)s);
_String ver (GetVersionString());
curl_easy_setopt (curl, CURLOPT_USERAGENT, ver.sData);
//curl_easy_setopt (curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, (void*)(f?url2File:url2String));
_Parameter vbl = 0.0;
checkParameter (VerbosityLevelString,vbl,0.0);
if (vbl<0.5)
{
curl_easy_setopt (curl,CURLOPT_NOPROGRESS,1);
}
res = curl_easy_perform (curl);
curl_easy_cleanup (curl);
if (f)
fclose (f);
else
{
s->Finalize();
urls = *s;
DeleteObject (s);
}
if (!res)
return true;
}
else
{
urls = "Failed to initialize CURL object";
return false;
}
urls = _String ("CURL error:") & (long)res & "." & cErr;
return false;
#else
urls = "This feature requires libcurl";
return false;
#endif
}
开发者ID:mdsmith,项目名称:OCLHYPHY,代码行数:69,代码来源:hyphyunixutils.cpp
示例7: testMultithreadedPut
static int
testMultithreadedPut ()
{
struct MHD_Daemon *d;
CURL *c;
char buf[2048];
struct CBC cbc;
unsigned int pos = 0;
int done_flag = 0;
int i;
cbc.buf = buf;
cbc.size = 2048;
cbc.pos = 0;
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
11080,
NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
if (d == NULL)
return 16;
zzuf_socat_start ();
for (i = 0; i < LOOP_COUNT; i++)
{
fprintf (stderr, ".");
c = curl_easy_init ();
curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
curl_easy_setopt (c, CURLOPT_READDATA, &pos);
curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
if (oneone)
curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
else
curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
// NOTE: use of CONNECTTIMEOUT without also
// setting NOSIGNAL results in really weird
// crashes on my system!
curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
curl_easy_perform (c);
curl_easy_cleanup (c);
}
fprintf (stderr, "\n");
zzuf_socat_stop ();
MHD_stop_daemon (d);
return 0;
}
开发者ID:dreamsxin,项目名称:golf,代码行数:50,代码来源:daemontest_put.c
示例8: getStatus
//http://acm.hdu.edu.cn/status.php?first=&pid=1000&user=bnuvjudge&lang=1&status=0
bool getStatus(string pid,string lang,string & result,string& ce_info,string &tu,string &mu) {
int begin=time(NULL);
string runid;
tu=mu="0";
string ts;
int tried=0;
while (true) {
FILE * fp=fopen(tfilename,"w+");
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "hdu.cookie");
string url=(string)"http://acm.hdu.edu.cn/status.php?first=&pid="+pid+"&user="+username+"&lang=&status=0";
//cout<<url;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
fclose(fp);
if (res) return false;
ts=getLineFromFile(tfilename,77);
//cout<<ts;
//writelog((char *)ts.c_str());
/*if (ts.find("alert(\"Login failed!)")!=string::npos) return false;
*/
if (ts.find("Connect(0) to MySQL Server failed.")!=string::npos||ts.find("<b>One or more following ERROR(s) occurred.")!=string::npos||ts.find("<h2>The requested URL could not be retrieved</h2>")!=string::npos||ts.find("PHP: Maximum execution time of")!=string::npos) {
tried++;
if (tried>=MAX_TRY_TIME) return false;
continue;
}
runid=getRunid(ts);
result=getResult(ts);
cout << result<<endl<<runid<<endl;
if (result.find("Waiting")==string::npos
&&result.find("Running")==string::npos
&&result.find("Judging")==string::npos
&&result.find("Queuing")==string::npos
&&result.find("Compiling")==string::npos
&&result.find("\n")&&result!="") {
break;
}
if (time(NULL)-begin>MAX_WAIT_TIME) break;
}
if (!(result.find("Waiting")==string::npos
&&result.find("Running")==string::npos
&&result.find("Judging")==string::npos
&&result.find("Queuing")==string::npos
&&result.find("Compiling")==string::npos)) return false;
if (result=="Compilation Error") {
//result="Compile Error";
ce_info=getCEinfo(runid);
}
else ce_info="";
tu=getUsedTime(ts);
mu=getUsedMem(ts);
/*
if (result != "Accepted" && result[result.length()-1] == 'd') {
result.erase(result.end()-2,result.end());
}
*/
return true;
}
开发者ID:jie414341055,项目名称:toj-dev,代码行数:64,代码来源:hduhandler.cpp
示例9: LM_TRANSACTION_START
//.........这里部分代码省略.........
outgoingMsgSize += acceptString.size();
// ----- Expect
headers = curl_slist_append(headers, "Expect: ");
outgoingMsgSize += 8; // from "Expect: "
// ----- Content-length
std::stringstream contentLengthStringStream;
contentLengthStringStream << content.size();
std::string headerContentLength = "Content-length: " + contentLengthStringStream.str();
LM_T(LmtHttpHeaders, ("HTTP-HEADERS: '%s'", headerContentLength.c_str()));
headers = curl_slist_append(headers, headerContentLength.c_str());
outgoingMsgSize += contentLengthStringStream.str().size() + 16; // from "Content-length: "
outgoingMsgSize += content.size();
// ----- Content-type
headers = curl_slist_append(headers, ("Content-type: " + content_type).c_str());
outgoingMsgSize += content_type.size() + 14; // from "Content-type: "
// Check if total outgoing message size is too big
if (outgoingMsgSize > MAX_DYN_MSG_SIZE)
{
LM_E(("Runtime Error (HTTP request to send is too large: %d bytes)", outgoingMsgSize));
// Cleanup curl environment
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
free(httpResponse->memory);
delete httpResponse;
LM_TRANSACTION_END();
return "error";
}
// Contents
const char* payload = content.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (u_int8_t*) payload);
// Set up URL
std::string url;
if (isIPv6(ip))
url = "[" + ip + "]";
else
url = ip;
url = url + ":" + portAsString + (resource.at(0) == '/'? "" : "/") + resource;
// Prepare CURL handle with obtained options
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, verb.c_str()); // Set HTTP verb
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // Allow redirection (?)
curl_easy_setopt(curl, CURLOPT_HEADER, 1); // Activate include the header in the body output
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // Put headers in place
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeMemoryCallback); // Send data here
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*) httpResponse); // Custom data for response handling
//
// Timeout
//
// The parameter timeoutInMilliseconds holds the timeout time in milliseconds.
// If the timeout time requested is 0, then no timeuot is used.
//
if (timeoutInMilliseconds != 0)
{
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, timeoutInMilliseconds);
}
// Synchronous HTTP request
LM_T(LmtClientOutputPayload, ("Sending message %lu to HTTP server: sending message of %d bytes to HTTP server", callNo, outgoingMsgSize));
res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
//
// NOTE: This log line is used by the functional tests in cases/880_timeout_for_forward_and_notifications/
// So, this line should not be removed/altered, at least not without also modifying the functests.
//
LM_W(("Notification failure for %s:%s (curl_easy_perform failed: %s)", ip.c_str(), portAsString, curl_easy_strerror(res)));
result = "";
}
else
{
// The Response is here
LM_I(("Notification Successfully Sent to %s", url.c_str()));
result.assign(httpResponse->memory, httpResponse->size);
}
// Cleanup curl environment
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
free(httpResponse->memory);
delete httpResponse;
LM_TRANSACTION_END();
return result;
}
开发者ID:fgalan,项目名称:fiware-orion,代码行数:101,代码来源:httpRequestSend.cpp
示例10: test
/*
* Source code in here hugely as reported in bug report 651464 by
* Christopher R. Palmer.
*
* Use multi interface to get document over proxy with bad port number.
* This caused the interface to "hang" in libcurl 7.10.2.
*/
int test(char *URL)
{
CURL *c;
int ret=0;
CURLM *m;
fd_set rd, wr, exc;
CURLMcode res;
char done = FALSE;
int running;
int max_fd;
int rc;
struct timeval ml_start;
struct timeval mp_start;
char ml_timedout = FALSE;
char mp_timedout = FALSE;
if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
fprintf(stderr, "curl_global_init() failed\n");
return TEST_ERR_MAJOR_BAD;
}
if ((c = curl_easy_init()) == NULL) {
fprintf(stderr, "curl_easy_init() failed\n");
curl_global_cleanup();
return TEST_ERR_MAJOR_BAD;
}
/* the point here being that there must not run anything on the given
proxy port */
curl_easy_setopt(c, CURLOPT_PROXY, arg2);
curl_easy_setopt(c, CURLOPT_URL, URL);
curl_easy_setopt(c, CURLOPT_VERBOSE, 1);
if ((m = curl_multi_init()) == NULL) {
fprintf(stderr, "curl_multi_init() failed\n");
curl_easy_cleanup(c);
curl_global_cleanup();
return TEST_ERR_MAJOR_BAD;
}
if ((res = curl_multi_add_handle(m, c)) != CURLM_OK) {
fprintf(stderr, "curl_multi_add_handle() failed, "
"with code %d\n", res);
curl_multi_cleanup(m);
curl_easy_cleanup(c);
curl_global_cleanup();
return TEST_ERR_MAJOR_BAD;
}
ml_timedout = FALSE;
ml_start = tutil_tvnow();
while (!done) {
struct timeval interval;
interval.tv_sec = 1;
interval.tv_usec = 0;
if (tutil_tvdiff(tutil_tvnow(), ml_start) >
MAIN_LOOP_HANG_TIMEOUT) {
ml_timedout = TRUE;
break;
}
mp_timedout = FALSE;
mp_start = tutil_tvnow();
fprintf(stderr, "curl_multi_perform()\n");
res = CURLM_CALL_MULTI_PERFORM;
while (res == CURLM_CALL_MULTI_PERFORM) {
res = curl_multi_perform(m, &running);
if (tutil_tvdiff(tutil_tvnow(), mp_start) >
MULTI_PERFORM_HANG_TIMEOUT) {
mp_timedout = TRUE;
break;
}
}
if (mp_timedout)
break;
if(!running) {
/* This is where this code is expected to reach */
int numleft;
CURLMsg *msg = curl_multi_info_read(m, &numleft);
fprintf(stderr, "Expected: not running\n");
if(msg && !numleft)
ret = 100; /* this is where we should be */
else
ret = 99; /* not correct */
break;
}
fprintf(stderr, "running == %d, res == %d\n", running, res);
//.........这里部分代码省略.........
开发者ID:irmametra,项目名称:EiffelStudio,代码行数:101,代码来源:lib504.c
示例11: main
/*
* Simply download a HTTP file.
*/
int main(int argc, char **argv)
{
CURL *http_handle;
CURLM *multi_handle;
int still_running; /* keep number of running handles */
http_handle = curl_easy_init();
/* set the options (I left out a few, you'll get the point anyway) */
curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.haxx.se/");
curl_easy_setopt(http_handle, CURLOPT_DEBUGFUNCTION, my_trace);
curl_easy_setopt(http_handle, CURLOPT_VERBOSE, 1L);
/* init a multi stack */
multi_handle = curl_multi_init();
/* add the individual transfers */
curl_multi_add_handle(multi_handle, http_handle);
/* we start some action by calling perform right away */
while(CURLM_CALL_MULTI_PERFORM ==
curl_multi_perform(multi_handle, &still_running));
while(still_running) {
struct timeval timeout;
int rc; /* select() return code */
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd = -1;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
/* set a suitable timeout to play around with */
timeout.tv_sec = 1;
timeout.tv_usec = 0;
/* get file descriptors from the transfers */
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
/* In a real-world program you OF COURSE check the return code of the
function calls. On success, the value of maxfd is guaranteed to be
greater or equal than -1. We call select(maxfd + 1, ...), specially in
case of (maxfd == -1), we call select(0, ...), which is basically equal
to sleep. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
switch(rc) {
case -1:
/* select error */
still_running = 0;
printf("select() returns error, this is badness\n");
break;
case 0:
default:
/* timeout or readable/writable sockets */
while(CURLM_CALL_MULTI_PERFORM ==
curl_multi_perform(multi_handle, &still_running));
break;
}
}
curl_multi_cleanup(multi_handle);
curl_easy_cleanup(http_handle);
return 0;
}
开发者ID:AndroidAppList,项目名称:Android-Supertux,代码行数:77,代码来源:multi-debugcallback.c
示例12: main
int main(int argc, char **argv)
{
CURL *curl;
CURLcode res;
FILE *ftpfile;
FILE * hd_src ;
int hd ;
struct stat file_info;
struct curl_slist *headerlist=NULL;
char buf_1 [] = "RNFR " UPLOAD_FILE_AS;
char buf_2 [] = "RNTO " RENAME_FILE_TO;
/* get the file size of the local file */
hd = open(LOCAL_FILE, O_RDONLY) ;
fstat(hd, &file_info);
close(hd) ;
/* get a FILE * of the same file, could also be made with
fdopen() from the previous descriptor, but hey this is just
an example! */
hd_src = fopen(LOCAL_FILE, "rb");
/* In windows, this will init the winsock stuff */
curl_global_init(CURL_GLOBAL_ALL);
/* get a curl handle */
curl = curl_easy_init();
if(curl) {
/* build a list of commands to pass to libcurl */
// headerlist = curl_slist_append(headerlist, buf_1);
// headerlist = curl_slist_append(headerlist, buf_2);
/* enable uploading */
curl_easy_setopt(curl, CURLOPT_UPLOAD, TRUE) ;
/* set user name and password */
curl_easy_setopt(curl, CURLOPT_USERPWD, "rutul:topspin");
/* specify target */
curl_easy_setopt(curl,CURLOPT_URL, REMOTE_URL);
/* pass in that last of FTP commands to run after the transfer */
// curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
/* now specify which file to upload */
curl_easy_setopt(curl, CURLOPT_INFILE, hd_src);
/* and give the size of the upload (optional) */
curl_easy_setopt(curl, CURLOPT_INFILESIZE, file_info.st_size);
/* Switch on full protocol/debug output */
curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE);
/* Now run off and do what you've been told! */
res = curl_easy_perform(curl);
/* clean up the FTP commands list */
curl_slist_free_all (headerlist);
/* always cleanup */
curl_easy_cleanup(curl);
}
fclose(hd_src); /* close the local file */
curl_global_cleanup();
return 0;
}
开发者ID:stockandawe,项目名称:c-and-cpp-test-programs,代码行数:68,代码来源:curl_example.c
示例13: http_client_request
void http_client_request(const char *url, const char *post_data,
http_client_callback_t *callback, void *data)
{
struct http_request *request = g_new(struct http_request, 1);
CURLcode code;
CURLMcode mcode;
bool success;
request->callback = callback;
request->callback_data = data;
/* create a CURL request */
request->curl = curl_easy_init();
if (request->curl == NULL) {
g_free(request);
callback(0, NULL, data);
return;
}
mcode = curl_multi_add_handle(http_client.multi, request->curl);
if (mcode != CURLM_OK) {
curl_easy_cleanup(request->curl);
g_free(request);
callback(0, NULL, data);
return;
}
/* .. and set it up */
curl_easy_setopt(request->curl, CURLOPT_USERAGENT, "mpdcron/" VERSION);
curl_easy_setopt(request->curl, CURLOPT_WRITEFUNCTION, http_request_writefunction);
curl_easy_setopt(request->curl, CURLOPT_WRITEDATA, request);
curl_easy_setopt(request->curl, CURLOPT_FAILONERROR, true);
curl_easy_setopt(request->curl, CURLOPT_ERRORBUFFER, request->error);
curl_easy_setopt(request->curl, CURLOPT_BUFFERSIZE, 2048);
if (file_config.proxy != NULL)
curl_easy_setopt(request->curl, CURLOPT_PROXY, file_config.proxy);
request->post_data = g_strdup(post_data);
if (request->post_data != NULL) {
curl_easy_setopt(request->curl, CURLOPT_POST, true);
curl_easy_setopt(request->curl, CURLOPT_POSTFIELDS, request->post_data);
}
code = curl_easy_setopt(request->curl, CURLOPT_URL, url);
if (code != CURLE_OK) {
curl_multi_remove_handle(http_client.multi, request->curl);
curl_easy_cleanup(request->curl);
g_free(request);
callback(0, NULL, data);
return;
}
request->body = g_string_sized_new(256);
http_client.requests = g_slist_prepend(http_client.requests, request);
/* initiate the transfer */
success = http_multi_perform();
if (!success) {
http_client.requests = g_slist_remove(http_client.requests, request);
http_request_free(request);
callback(0, NULL, data);
return;
}
http_multi_info_read();
}
开发者ID:kaivalagi,项目名称:mpdcron,代码行数:70,代码来源:scrobbler-curl.c
示例14: return
JNIEXPORT jint JNICALL Java_com_netbirdtech_libcurl_Curl_curlEasySetoptLongNative
(JNIEnv *env, jobject obj, jlong handle, jint opt, jlong value) {
Holder* holder = (Holder*) handle;
return (int) curl_easy_setopt(holder->getCurl(), (CURLoption) opt, (long) value);
}
开发者ID:mahongquan,项目名称:java-jni,代码行数:5,代码来源:Main.cpp
示例15: main
int main(void)
{
CURL *handles[HANDLECOUNT];
CURLM *multi_handle;
int still_running = 0; /* keep number of running handles */
int i;
CURLMsg *msg; /* for picking up messages with the transfer status */
int msgs_left; /* how many messages are left */
/* Allocate one CURL handle per transfer */
for(i = 0; i<HANDLECOUNT; i++)
handles[i] = curl_easy_init();
/* set the options (I left out a few, you'll get the point anyway) */
curl_easy_setopt(handles[HTTP_HANDLE], CURLOPT_URL, "https://example.com");
curl_easy_setopt(handles[FTP_HANDLE], CURLOPT_URL, "ftp://example.com");
curl_easy_setopt(handles[FTP_HANDLE], CURLOPT_UPLOAD, 1L);
/* init a multi stack */
multi_handle = curl_multi_init();
/* add the individual transfers */
for(i = 0; i<HANDLECOUNT; i++)
curl_multi_add_handle(multi_handle, handles[i]);
/* we start some action by calling perform right away */
curl_multi_perform(multi_handle, &still_running);
while(still_running) {
struct timeval timeout;
int rc; /* select() return code */
CURLMcode mc; /* curl_multi_fdset() return code */
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd = -1;
long curl_timeo = -1;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
/* set a suitable timeout to play around with */
timeout.tv_sec = 1;
timeout.tv_usec = 0;
curl_multi_timeout(multi_handle, &curl_timeo);
if(curl_timeo >= 0) {
timeout.tv_sec = curl_timeo / 1000;
if(timeout.tv_sec > 1)
timeout.tv_sec = 1;
else
timeout.tv_usec = (curl_timeo % 1000) * 1000;
}
/* get file descriptors from the transfers */
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
if(mc != CURLM_OK) {
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
break;
}
/* On success the value of maxfd is guaranteed to be >= -1. We call
select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
to sleep 100ms, which is the minimum suggested value in the
curl_multi_fdset() doc. */
if(maxfd == -1) {
#ifdef _WIN32
Sleep(100);
rc = 0;
#else
/* Portable sleep for platforms other than Windows. */
struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
rc = select(0, NULL, NULL, NULL, &wait);
#endif
}
else {
/* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */
rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
}
switch(rc) {
case -1:
/* select error */
break;
case 0: /* timeout */
default: /* action */
curl_multi_perform(multi_handle, &still_running);
break;
}
}
//.........这里部分代码省略.........
开发者ID:JDepooter,项目名称:curl,代码行数:101,代码来源:multi-app.c
示例16: main
int main(void)
{
CURL *curl;
CURLM *multi_handle;
int still_running;
struct curl_httppost *formpost=NULL;
struct curl_httppost *lastptr=NULL;
struct curl_slist *headerlist=NULL;
static const char buf[] = "Expect:";
/* Fill in the file upload field. This makes libcurl load data from
the given file name when curl_easy_perform() is called. */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "sendfile",
CURLFORM_FILE, "postit2.c",
CURLFORM_END);
/* Fill in the filename field */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "postit2.c",
CURLFORM_END);
/* Fill in the submit field too, even if this is rarely needed */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "send",
CURLFORM_END);
curl = curl_easy_init();
multi_handle = curl_multi_init();
/* initialize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl && multi_handle) {
/* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/upload.cgi");
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
curl_multi_add_handle(multi_handle, curl);
curl_multi_perform(multi_handle, &still_running);
do {
struct timeval timeout;
int rc; /* select() return code */
CURLMcode mc; /* curl_multi_fdset() return code */
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd = -1;
long curl_timeo = -1;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
/* set a suitable timeout to play around with */
timeout.tv_sec = 1;
timeout.tv_usec = 0;
curl_multi_timeout(multi_handle, &curl_timeo);
if(curl_timeo >= 0) {
timeout.tv_sec = curl_timeo / 1000;
if(timeout.tv_sec > 1)
timeout.tv_sec = 1;
else
timeout.tv_usec = (curl_timeo % 1000) * 1000;
}
/* get file descriptors from the transfers */
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
if(mc != CURLM_OK)
{
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
break;
}
/* On success the value of maxfd is guaranteed to be >= -1. We call
select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
to sleep 100ms, which is the minimum suggested value in the
curl_multi_fdset() doc. */
if(maxfd == -1) {
#ifdef _WIN32
Sleep(100);
//.........这里部分代码省略.........
开发者ID:601040605,项目名称:WNetLicensor,代码行数:101,代码来源:multi-post.c
示例17: testExternalGet
static int
testExternalGet ()
{
struct MHD_Daemon *d;
CURL *c;
char buf[2048];
struct CBC cbc;
CURLM *multi;
CURLMcode mret;
fd_set rs;
fd_set ws;
fd_set es;
MHD_socket maxsock;
#ifdef MHD_WINSOCK_SOCKETS
int maxposixs; /* Max socket number unused on W32 */
#else /* MHD_POSIX_SOCKETS */
#define maxposixs maxsock
#endif /* MHD_POSIX_SOCKETS */
int running;
struct CURLMsg *msg;
time_t start;
struct timeval tv;
multi = NULL;
cbc.buf = buf;
cbc.size = 2048;
cbc.pos = 0;
d = MHD_start_daemon (MHD_USE_DEBUG,
21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
if (d == NULL)
return 256;
c = curl_easy_init ();
curl_easy_setopt (c, CURLOPT_URL,
"http://127.0.0.1:21080/hello+world?k=v+x&hash=%23foo&space=%A0bar");
curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
if (oneone)
curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
else
curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 150L);
/* NOTE: use of CONNECTTIMEOUT without also
setting NOSIGNAL results in really weird
crashes on my system! */
curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
multi = curl_multi_init ();
if (multi == NULL)
{
curl_easy_cleanup (c);
MHD_stop_daemon (d);
return 512;
}
mret = curl_multi_add_handle (multi, c);
if (mret != CURLM_OK)
{
curl_multi_cleanup (multi);
curl_easy_cleanup (c);
MHD_stop_daemon (d);
return 1024;
}
start = time (NULL);
while ((time (NULL) - start < 5) && (multi != NULL))
{
maxsock = MHD_INVALID_SOCKET;
maxposixs = -1;
FD_ZERO (&rs);
FD_ZERO (&ws);
FD_ZERO (&es);
curl_multi_perform (multi, &running);
mret = curl_multi_fdset (multi, &rs, &ws, &es, &maxposixs);
if (mret != CURLM_OK)
{
curl_multi_remove_handle (multi, c);
curl_multi_cleanup (multi);
curl_easy_cleanup (c);
MHD_stop_daemon (d);
return 2048;
}
if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &maxsock))
{
curl_multi_remove_handle (multi, c);
curl_multi_cleanup (multi);
curl_easy_cleanup (c);
MHD_stop_daemon (d);
return 4096;
}
tv.tv_sec = 0;
tv.tv_usec = 1000;
if (-1 == select (maxposixs + 1, &rs, &ws, &es, &tv))
{
if (EINTR != errno)
abort ();
}
curl_multi_perform (multi, &running);
if (running == 0)
{
//.........这里部分代码省略.........
开发者ID:svn2github,项目名称:libmicrohttpd,代码行数:101,代码来源:test_process_arguments.c
示例18: action_failoverip
static int action_failoverip(struct uwsgi_legion *ul, char *arg) {
int ret = -1;
char *url = NULL;
char *auth = NULL;
struct hetzner_failoverip_config hfc;
memset(&hfc, 0, sizeof(struct hetzner_failoverip_config));
if (uwsgi_kvlist_parse(arg, strlen(arg), ',', '=',
"username", &hfc.username,
"password", &hfc.password,
"user", &hfc.username,
"pass", &hfc.password,
"url", &hfc.url,
"timeout", &hfc.timeout,
"ip", &hfc.ip,
"active_ip", &hfc.active_ip,
"active_server_ip", &hfc.active_ip,
"ssl_no_verify", &hfc.ssl_no_verify,
NULL)) {
uwsgi_log("unable to parse
|
请发表评论