×

libcurlpost上传文件

libcurlpost上传文件(libcurl传输错误)

admin admin 发表于2023-04-01 21:21:09 浏览67 评论0

抢沙发发表评论

本文目录一览:

在使用libcurl编写FTP上传文件时怎样正确处理网线被拔

可能是服务期问题.还有就是你的FTP帐号正确不.还有端口是否设置正确.建议你用FlashFXP来上传FlashFXP是一个功能强大的FXP/FTP软件,融合了一些其他优秀FTP软件的优点,如像CuteFTP一样可以比较文件夹,支持彩色文字显示;像BpFTP支持多文件夹选择文件,能够缓存文件夹;像LeapFTP一样的外观界面,甚至设计思路也差相仿佛。支持文件夹(带子文件夹)的文件传送、删除;支持上传、下载及第三方文件续传;可以跳过指定的文件类型,只传送需要的文件;可以自定义不同文件类型的显示颜色;可以缓存远端文件夹列表,支持FTP代理及Socks34;具有避免空闲功能,防止被站点踢出;可以显示或隐藏“隐藏”属性的文件、文件夹;支持每个站点使用被动模式等。下载地址:2506.htm

基于libcurl库,用C++编写了FTP上传函数,传本地文件,现在为了提高效率,想直接发一段内存过去,咋做?

写一个回调函数,将文件切分成多块,每次上传成功就增加 size 记录当前已经下载的大小 记得读写文件要用 fseek

php如何上传图片到远程服务器

可以使用curl这个扩展来实现。

PHP 支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。

libcurl支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。-libcurlpost上传文件

curl_close() 关闭一个cURL会话。

curl_copy_handle()复制一个cURL句柄和它的所有选项。

curl_errno()返回最后一次的错误号。

curl_error()返回一个保护当前会话最近一次错误的字符串。

curl_escape()返回转义字符串,对给定的字符串进行URL编码。

curl_exec()执行一个cURL会话。

curl_file_create()创建一个CURLFile对象。

curl_getinfo()获取一个cURL连接资源句柄的信息。

curl_init()初始化一个cURL会话。

curl_multi_add_handle()向curl批处理会话中添加单独的curl句柄。

curl_multi_close()关闭一组cURL句柄。

curl_multi_exec()运行当前cURL句柄的子连接

curl_multi_getcontent()如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。

curl_multi_info_read()获取当前解析的cURL的相关传输信息。

curl_multi_init()返回一个新cURL批处理句柄。

curl_multi_remove_handle()移除curl批处理句柄资源中的某个句柄资源。

curl_multi_select()等待所有cURL批处理中的活动连接。

curl_multi_setopt()设置一个批处理cURL传输选项。

curl_multi_strerror()返回描述错误码的字符串文本。

curl_pause()暂停及恢复连接。

curl_reset()重置libcurl的会话句柄的所有选项。

curl_setopt_array()为cURL传输会话批量设置选项。

curl_setopt()设置一个cURL传输选项。

curl_share_close()关闭cURL共享句柄。

curl_share_init()初始化cURL共享句柄。

curl_share_setopt()设置一个共享句柄的cURL传输选项。

curl_strerror()返回错误代码的字符串描述。

curl_unescape()解码URL编码后的字符串。

curl_version()获取cURL版本信息。

C/C++怎么实现post数据提交?

以下方法用CURL提交表单

1. 编译环境.

安装vs2010或其他版本. vs2010 express版也可以。不要低于vc6.

2. 搜索curl-7.25.0.zip,下载。

解压到c:\curl-7.25.0

打开Visual Studio Command Prompt (2010)

cd \curl-7.25.0\winbuild

nmake /f Makefile.vc mode=dll USE_SSSPI=no ENABLE_IDN=no

编译成功后 cd ..\builds

到一个名字为libcurl-....lib的子目录里找到libcurl.dll和libcurl.lib, 保存到一个目录下备份,下面要用。

3. 打开vc++ 2010, File-New project,选Win32 Project, 输入一个项目名。下面点Next,勾上Console Application和Empty Project. -libcurlpost上传文件

4. 配置项目

到我的文档下找到vs2010 projects目录,找到 solution名字\项目名字 目录,

把curl-7.25.0目录下的include目录拷贝到项目目录下

把2备份好的libcurl.dll和libcurl.lib拷贝到项目目录.

在vc++中右键点击项目名(或Alt+F7), 点开Configuration Properties, 点vc++directories

点Include Directories, 点Edit, 添加$(ProjectDir)include 确定

在点击左侧的Linker, 点Input,点Additional Dependences, 点Edit, 添加一行$(ProjectDir)\libcurl.lib 确定

5. 代码。

右键点项目名字,Add New Item-C++ File, name写main.c, 输入代码:

/* 抱歉,这里不好贴链接,版权没法贴,版权去看http-post.c */

#include stdio.h

#include curl/curl.h

#include stdlib.h

int main(void)

{

CURL *curl;

CURLcode res;

curl = curl_easy_init();

if(curl) {

/* First set the URL that is about to receive our POST. This URL can

just as well be a https:// URL if that is what should receive the

data. */

curl_easy_setopt(curl, CURLOPT_URL, "这里写网址");

/* Now specify the POST data */

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=danielproject=curl");

/* Perform the request, res will get the return code */

res = curl_easy_perform(curl);

/* always cleanup */

curl_easy_cleanup(curl);

system("pause");

}

return 0;

}

点vc++绿色的三角编译运行。

libcurl post 返回结果必须文件存储吗

为了具有通用性,将文件的内容读到了fc变量中,fclen是fc的长度。fc也可以是任何其它内容。curl 是 libcurl句柄。演示省略了很多显而易见的步骤。

1. 普通的post请求,这里用curl_easy_escape对fc做了编码

std::string data("req=plain");

data.append("file=");

char *efc = curl_easy_escape(curl, fc, fclen);

data.append(efc)

curl_free(encoded);

curl_easy_setopt(curl, CURLOPT_URL, PURGE_URL);

curl_easy_setopt(curl, CURLOPT_POST, 1L);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());

curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data.size());

2. multipart/formdata请求

struct curl_httppost *formpost = 0;

struct curl_httppost *lastptr = 0;

curl_formadd(formpost, lastptr, CURLFORM_PTRNAME, "reqformat", CURLFORM_PTRCONTENTS, "plain", CURLFORM_END);-libcurlpost上传文件

curl_formadd(formpost, lastptr, CURLFORM_PTRNAME, "file", CURLFORM_PTRCONTENTS, fc, CURLFORM_CONTENTSLENGTH, fclen, CURLFORM_END);-libcurlpost上传文件

curl_easy_setopt(curl, CURLOPT_URL, URL);

curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

curl_easy_perform(curl);

curl_formfree(formpost);

3. multipart/formdata请求,不把文件读入fc,其它步骤相同

curl_formadd(formpost, lastptr, CURLFORM_PTRNAME, "file", CURLFORM_FILE, "/path/filename", CURLFORM_END);-libcurlpost上传文件

4. 通过put上传文件

curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

curl_easy_setopt(curl, CURLOPT_PUT, 1L);

curl_easy_setopt(curl, CURLOPT_READDATA, fp); // FILE *fp = fopen("/path/filename");

curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, fsize); // fsize = sizeof /path/filename

5. 发送自己的Header

struct curl_slist *slist = 0;

slist = curl_slist_append(slist, "Blog-X-User: username");

slist = curl_slist_append(slist, "Blog-X-Signature: signature");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);

curl_slist_free_all(slist);

windows上pycurl怎样使用

关于python网络编程,使用urllib与服务器通信时,客户端的数据是添加到Head里面通过URL,发送到服务器端,urllib包实现客户端上传文件时,会出现死掉的状态(实际上是超时设置问题)。

Pycurl包是一个libcurl的Python接口,它是由C语言编写的。与urllib相比,它的速度要快很多。

Libcurl 是一个支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 和 LDAP的客户端URL传输库.libcurl也支持HTTPS认证,HTTP POST,HTTP PUT,FTP上传,代理,Cookies,基本身份验证,FTP文件断点继传,HTTP代理通道等等。-libcurlpost上传文件

#!/usr/bin/env python2

#encoding=utf8

import pycurl

import StringIO

# 安装pycurl到这里去找.

# 在windows安装的话 , 看你使用的版本决定下载那个,我在 windows使用的是python2.4, 所以下载 pycurl-ssl-7.15.5.1.win32-py2.4.exe 。

def test(debug_type, debug_msg):

print "debug(%d): %s" % (debug_type, debug_msg)

def postFile(url,post_file):

#print pycurl.version_info()

#这个函数创建一个同 libcurl中的CURL处理器相对应的Curl对象.Curl对象自动的设置CURLOPT_VERBOSE为0, CURLOPT_NOPROGRESS为1,提供一个默认的CURLOPT_USERAGENT和设置CURLOPT_ERRORBUFFER指向一个私有的错误缓冲区.-libcurlpost上传文件

c = pycurl.Curl() #创建一个同libcurl中的CURL处理器相对应的Curl对象

b = StringIO.StringIO()

#c.setopt(c.POST, 1)

c.setopt(pycurl.URL, url) #设置要访问的网址 url = ""

#写的回调

c.setopt(pycurl.WRITEFUNCTION, b.write)

c.setopt(pycurl.FOLLOWLOCATION, 1) #参数有1、2

#最大重定向次数,可以预防重定向陷阱

c.setopt(pycurl.MAXREDIRS, 5)

#连接超时设置

c.setopt(pycurl.CONNECTTIMEOUT, 60) #链接超时

# c.setopt(pycurl.TIMEOUT, 300) #下载超时

# c.setopt(pycurl.HEADER, True)

# c.setopt(c.HTTPHEADER, ["Content-Type: application/x-www-form-urlencoded","X-Requested-With:XMLHttpRequest","Cookie:"+set_cookie[0]])-libcurlpost上传文件

#模拟浏览器

c.setopt(pycurl.USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)")-libcurlpost上传文件

# c.setopt(pycurl.AUTOREFERER,1)

# c.setopt(c.REFERER, url)

# cookie设置

# Option -b/--cookie name=string/file Cookie string or file to read cookies from

# Note: must be a string, not a file object.

# c.setopt(pycurl.COOKIEFILE, "cookie_file_name")

# Option -c/--cookie-jar Write cookies to this file after operation

# Note: must be a string, not a file object.

# c.setopt(pycurl.COOKIEJAR, "cookie_file_name")

# Option -d/--data HTTP POST data

post_data_dic = {"name":"value"}

c.setopt(c.POSTFIELDS, urllib.urlencode(post_data_dic))

#设置代理

# c.setopt(pycurl.PROXY, ‘′)

# c.setopt(pycurl.PROXYUSERPWD, ‘aaa:aaa’)

#不明确作用

# c.setopt(pycurl.HTTPPROXYTUNNEL,1) #隧道代理

# c.setopt(pycurl.NOSIGNAL, 1)

#设置post请求, 上传文件的字段名 上传的文件

#post_file = "/home/ubuntu/avatar.jpg"

c.setopt(c.HTTPPOST, [("textname", (c.FORM_FILE, post_file))])

# 调试回调.调试信息类型是一个调试信 息的整数标示类型.在这个回调被调用时VERBOSE选项必须可用

# c.setopt(c.VERBOSE, 1) #verbose 详细

# c.setopt(c.DEBUGFUNCTION, test)

# f = open("body", "wb")

# c.setopt(c.WRITEDATA, f)

# h = open("header", "wb")

# c.setopt(c.WRITEHEADER, h)

# print "Header is in file 'header', body is in file 'body'"

# f.close()

# h.close()

# c.setopt(c.NOPROGRESS, 0)

# c.setopt(c.PROGRESSFUNCTION, progress)

# c.setopt(c.OPT_FILETIME, 1)

#访问,阻塞到访问结束

c.perform() #执行上述访问网址的操作

print "HTTP-code:", c.getinfo(c.HTTP_CODE) #打印出 200(HTTP状态码)

print "Total-time:", c.getinfo(c.TOTAL_TIME)

print "Download speed: %.2f bytes/second" % c.getinfo(c.SPEED_DOWNLOAD)

print "Document size: %d bytes" % c.getinfo(c.SIZE_DOWNLOAD)

print "Effective URL:", c.getinfo(c.EFFECTIVE_URL)

print "Content-type:", c.getinfo(c.CONTENT_TYPE)

print "Namelookup-time:", c.getinfo(c.NAMELOOKUP_TIME)

print "Redirect-time:", c.getinfo(c.REDIRECT_TIME)

print "Redirect-count:", c.getinfo(c.REDIRECT_COUNT)

# epoch = c.getinfo(c.INFO_FILETIME)

#print "Filetime: %d (%s)" % (epoch, time.ctime(epoch))

html = b.getvalue()

print(html)

b.close()

c.close()