cpost上传图片
在机器上安装了Python的setuptools工具,可以通过下面的命令来安装 poster:
easy_installposter
装完之后,安装下面代码就可以实现post表单上传文件了:
fromposter.encodeimportmultipart_encode
fromposter.streaminghttpimportregister_openers
importurllib2
#在urllib2上注册http流处理句柄
register_openers()
#开始对文件"DSC0001.jpg"的multiart/form-data编码
#"image1"是参数的名字,一般通过HTML中的<input>标签的name参数设置
#headers包含必须的Content-Type和Content-Length
#datagen是一个生成器对象,返回编码过后的参数
datagen,headers=multipart_encode({"image1":open("DSC0001.jpg","rb")})
#创建请求对象(localhost服务器IP地址,5000服务器端口)
request=urllib2.Request("http://localhost:5000/upload_image",datagen,headers)
#实际执行请求并取得返回
printurllib2.urlopen(request).read()
⑵ python requests 使用post方式上传图片
他那个文件是在当前目录下, 所以不需要写绝对路径.
你只需要把第二行的files改成如下就好:
files={'file':open('/c/1/2.jpg','rb')}
⑶ C语言如何实现POST数据包
先建立TCP连接,然后发送HTTPpost.
你看看下面的数据包就知道了。
⑷ C++ 以POST方式向网页提交数据.有错误。。求大神解救就这点财富值了,见谅。图片是错误。
只帮你解决崩溃的问题哈
就说两个问题:
1、VS2005或以上的IDE默认是用UNICODE的,你代码里混用ANSI和UNICODE,又做强制转换,导致了一些参数出错
2、OpenRequest接受两种不同的参数的,既然你用的是HTTP_VERB_POST,为什么要强制转换成LPCTSTR呢,这样会导致它调用的是另外一个函数(C++支持同名函数,不同参数)
boolPostHttpPage(conststd::wstring&hostName,
conststd::wstring&pathName,
conststd::wstring&postData)
{
usingnamespacestd;
CInternetSessionsession(_T("session"),0,INTERNET_OPEN_TYPE_PRECONFIG,NULL,
NULL,INTERNET_FLAG_DONT_CACHE);//设置不缓冲
INTERNET_PORTnPort=80;
DWORDdwRet=0;
CHttpConnection*pServer=session.GetHttpConnection(
(LPCTSTR)hostName.c_str(),nPort);
CHttpFile*pFile=pServer->OpenRequest(CHttpConnection::
HTTP_VERB_POST,(LPCTSTR)pathName.c_str());
CStringstrHeaders=L"Content-Type:application/x-www-form-urlencoded";//请求头
//开始发送请求
pFile->SendRequest(strHeaders,(LPVOID)postData.c_str(),
postData.size());
pFile->QueryInfoStatusCode(dwRet);
if(dwRet==HTTP_STATUS_OK)
{
CStringresult,newline;
while(pFile->ReadString(newline))
{//循环读取每行内容
result+=newline+L" ";
}
std::cout<<result<<std::endl;//显示返回内容
}
else
{
returnfalse;
}
deletepFile;
deletepServer;
cout<<"成功"<<endl;
session.Close();
returntrue;
}
//调用时用下面的代替
PostHttpPage(L"localhost",L"welcome.php",L"name=rain&age=21");
⑸ 怎么用C实现Http POST功能向Http服务器上传文件
用socket就行了。
和服务器建立请求。
然后发送请求报文"\r\n\r\n"结束之后是数据。
post分为,application/x-www-form-urlencoded和multipart/form-data boundary=
要是上传文件,就得使用multipart/form-data boundary=...
服务器那边根据boundary来解析出数据。
⑹ 易语言用服务器组件怎么接收POST过来的图片
在Content-Type: image/jpeg这一行的下面就是图片的数据。
通过分割字符串或者字节集,将这一行下面的内容与边界——即下一个 ------ 或EOF之间的内容取出,单独写入一个文件,就可以得到文件。
其实易语言不大适合在网页服务器用,因为它的使用真的不算方便。
⑺ C++Builder XE2怎么通过IDHTTP的POST方法上传文件
C++Builder XE2如何通过IDHTTP的POST方法上传文件?
DEPHI的代码如下:
var
MultiPartFormDataStream: TMsMultiPartFormDataStream;
idhttp1:TIdHTTP;
begin
MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
try
id(nil);
IdHTTP1.ProtocolVersion:=pv1_1;
IdHTTP1.HandleRedirects := True;
IdHTTP1.Request.UserAgent:='Klive';
IdHTTP1.Request.Connection:='Keep-Alive';
IdHTTP1.HTTPOptions:=IdHTTP1.HTTPOptions+[hoKeepOrigProtocol];
IdHttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType;
MultiPartFormDataStream.AddFormField('name', 'file');
MultiPartFormDataStream.AddFormField('filename', Path);
MultiPartFormDataStream.AddFile('file', filename, 'testmime');
MultiPartFormDataStream.PrepareStreamForDispatch;
MultiPartFormDataStream.Position := 0;
try
Result:=pchar(id(str,MultiPartFormDataStream));
except
on e: EIdHTTPProtocolException do
begin
result:= pchar(e.ErrorMessage);// Application.MessageBox(PChar(e.ErrorMessage), 'ERROR', MB_OK + MB_ICONSTOP);
end;
end;
finally
MultiPartFormDataStream.Free;
这个代码是金山快盘上传文件的实现代码,具体要求是这样的:
POST /cdlnode/1/fileops/upload_file oauth_nonce=57895862&oauth_timestamp=1328956550&oauth_consumer_key=xcKXXgo9AkXdJuBn&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=&oauth_signature=eQ9BhjCaIpUAWDD3cbb%2BrtlfXt4%3D&path=%2Fttt1328956550.95sss%2Ftestw.wps&root=app_folder&overwrite=True HTTP/1.1
Accept-Encoding: identity
Content-Length: 237
Host: ufaclien
Content-Type: multipart/form-data; boundary=----------ThIs_Is_tHe_bouNdaRY_$
Connection: close
User-Agent: klive
------------ThIs_Is_tHe_bouNdaRY_$
Content-Disposition: form-data; name="file"; filename="testw.wps"
Content-Type: application/octet-stream
1328956550.991328956550.991328956550.991328956550.99
------------ThIs_Is_tHe_bouNdaRY_$--
⑻ 如何用C++或者python实现接收客户端发送的post请求
一个http请求包括三个部分,分别为请求行,请求报头(请求头),消息主体(请求体),类似以下这样:
{
“args”:{},
“data”:“”,
“files”:{
“file”:“Helloworld!”
},
“form”:{},
“headers”:{……
“Content-Type”:“multipart/form-data;boundary=”,
……
},
“json”:null,
……
}
---------------------
作者:weixin_40283480
来源:CSDN
原文:https://blog.csdn.net/weixin_40283480/article/details/79208413
版权声明:本文为博主原创文章,转载请附上博文链接!
⑼ 如何使用multipart/form-data格式上传文件
在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。
Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器。
表单形式上传附件
具体的步骤是怎样的呢?
首先,客户端和服务器建立连接(TCP协议)。
第二,客户端可以向服务器端发送数据。因为上传文件实质上也是向服务器端发送请求。
第三,客户端按照符合“multipart/form-data”的格式向服务器端发送数据。
既然Multipart/form-data格式就是浏览器用表单提交数据的格式,我们就来看看文件经过浏览器编码后是什么样子。
这行指出这个请求是“multipart/form-data”格式的,且“boundary”是 “---------------------------7db15a14291cce”这个字符串。
不难想象,“boundary”是用来隔开表单中不同部分数据的。例子中的表单就有 2 部分数据,用“boundary”隔开。“boundary”一般由系统随机产生,但也可以简单的用“-------------”来代替。
实际上,每部分数据的开头都是由"--" + boundary开始,而不是由 boundary 开始。仔细看才能发现下面的开头这段字符串实际上要比 boundary 多了个 “--”
紧接着 boundary 的是该部分数据的描述。
接下来才是数据。
“GIF”gif格式图片的文件头,可见,unknow1.gif确实是gif格式图片。
在请求的最后,则是 "--" + boundary + "--" 表明表单的结束。
需要注意的是,在html协议中,用 “ ” 换行,而不是 “ ”。
下面的代码片断演示如何构造multipart/form-data格式数据,并上传图片到服务器。
//---------------------------------------
// this is the demo code of using multipart/form-data to upload text and photos.
// -use WinInet APIs.
//
//
// connection handlers.
//
HRESULT hr;
HINTERNET m_hOpen;
HINTERNET m_hConnect;
HINTERNET m_hRequest;
//
// make connection.
//
...
//
// form the content.
//
std::wstring strBoundary = std::wstring(L"------------------");
std::wstring wstrHeader(L"Content-Type: multipart/form-data, boundary=");
wstrHeader += strBoundary;
HttpAddRequestHeaders(m_hRequest, wstrHeader.c_str(), DWORD(wstrHeader.size()), HTTP_ADDREQ_FLAG_ADD);
//
// "std::wstring strPhotoPath" is the name of photo to upload.
//
//
// uploaded photo form-part begin.
//
std::wstring strMultipartFirst(L"--");
strMultipartFirst += strBoundary;
strMultipartFirst += L" Content-Disposition: form-data; name="pic"; filename=";
strMultipartFirst += L""" + strPhotoPath + L""";
strMultipartFirst += L" Content-Type: image/jpeg ";
//
// "std::wstring strTextContent" is the text to uploaded.
//
//
// uploaded text form-part begin.
//
std::wstring strMultipartInter(L" --");
strMultipartInter += strBoundary;
strMultipartInter += L" Content-Disposition: form-data; name="status" ";
std::wstring wstrPostDataUrlEncode(CEncodeTool::Encode_Url(strTextContent));
// add text content to send.
strMultipartInter += wstrPostDataUrlEncode;
std::wstring strMultipartEnd(L" --");
strMultipartEnd += strBoundary;
strMultipartEnd += L"-- ";
//
// open photo file.
//
// ws2s(std::wstring)
// -transform "strPhotopath" from unicode to ansi.
std::ifstream *pstdofsPicInput = new std::ifstream;
pstdofsPicInput->open((ws2s(strPhotoPath)).c_str(), std::ios::binary|std::ios::in);
pstdofsPicInput->seekg(0, std::ios::end);
int nFileSize = pstdofsPicInput->tellg();
if(nPicFileLen == 0)
{
return E_ACCESSDENIED;
}
char *pchPicFileBuf = NULL;
try
{
pchPicFileBuf = new char[nPicFileLen];
}
catch(std::bad_alloc)
{
hr = E_FAIL;
}
if(FAILED(hr))
{
return hr;
}
pstdofsPicInput->seekg(0, std::ios::beg);
pstdofsPicInput->read(pchPicFileBuf, nPicFileLen);
if(pstdofsPicInput->bad())
{
pstdofsPicInput->close();
hr = E_FAIL;
}
delete pstdofsPicInput;
if(FAILED(hr))
{
return hr;
}
// Calculate the length of data to send.
std::string straMultipartFirst = CEncodeTool::ws2s(strMultipartFirst);
std::string straMultipartInter = CEncodeTool::ws2s(strMultipartInter);
std::string straMultipartEnd = CEncodeTool::ws2s(strMultipartEnd);
int cSendBufLen = straMultipartFirst.size() + nPicFileLen + straMultipartInter.size() + straMultipartEnd.size();
// Allocate the buffer to temporary store the data to send.
PCHAR pchSendBuf = new CHAR[cSendBufLen];
memcpy(pchSendBuf, straMultipartFirst.c_str(), straMultipartFirst.size());
memcpy(pchSendBuf + straMultipartFirst.size(), (const char *)pchPicFileBuf, nPicFileLen);
memcpy(pchSendBuf + straMultipartFirst.size() + nPicFileLen, straMultipartInter.c_str(), straMultipartInter.size());
memcpy(pchSendBuf + straMultipartFirst.size() + nPicFileLen + straMultipartInter.size(), straMultipartEnd.c_str(), straMultipartEnd.size());
//
// send the request data.
//
HttpSendRequest(m_hRequest, NULL, 0, (LPVOID)pchSendBuf, cSendBufLen)
⑽ 怎么把电脑本地磁盘C:上的图片传到网上
你用免费的相册阿,搜索“免费相册”,注册一个就好了
怎么把图片变成贴图?
首先,电脑内存放的图片不能上传。所以你要找一个网络相册把你要的图片传上去。比如网络空间的相册,QQ空间的相册,网易相册等等。不过一般这些相册上的照片只能在该网站的论坛上发,比如网络相册上的只能发到网络帖吧,而如果发到其他网站就看不到图片。接下来的步骤:·前两项参考网络·1.将鼠标移动到图片上,点击鼠标右键,选择“属性”。
2.这时会出现一个对话框,在对话框“地址(URL)”一项旁边,有一段很长的地址。将这段地址“复制”下来。3.将地址粘贴到帖地址的地方,之后点“确定“,完成帖图的操作。你也可以直接看网络帖吧对这方面的介绍。地址:
http://www..com/search/post_img.html#n4[
把上面一段地址选中,复制,粘贴到窗口上方地址栏里,点“转到”就或者按Enter回车键就可以看了]在其他网站上帖图的方法和网络类似。介绍几个可以上传图片的网站
:
http://www.freep.cn/
随意贴
http://www.namipan.com/index.php
纳米盘
http://tu.6.cn/
快捷贴图
http://www.my2cool.com/asp/index.asp
网站名称:my2Cool
http://97city.com/97city/001.html
网站名称:97city(这个是英文的)