http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 15374|回复: 6

[求助] HttpHelper上传文件同时还要POST其他参数,怎么解决

[复制链接]
发表于 2014-10-15 02:18:02 | 显示全部楼层 |阅读模式
我用HttpHelper做了一个上传文件,但是同时还需要POST其他字符串参数,这个要怎么解决呢

我的HttpItem如下
[C#] 纯文本查看 复制代码
Method = "POST",
Postdata = "a=aaa&b=bbb",
PostDataType = PostDataType.Byte,
PostdataByte = (byte[]数据)


但是在接收页接收不到字符串参数的值,求大大们帮忙

条件:接收页是别人的页面,所以我的文件必须是即含文件,又含字符串,而且都是POST

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-10-15 10:35:20 | 显示全部楼层
传数据全部转成一个类型上传就行了,同时传两种 是不行的,最后都是转成字节的
 楼主| 发表于 2014-10-15 22:12:39 | 显示全部楼层
站长苏飞 发表于 2014-10-15 10:35
传数据全部转成一个类型上传就行了,同时传两种 是不行的,最后都是转成字节的

我把他们都转成byte[],但是不知道该怎么把两字符串和Stream合成一个byte[],去网上找了些文章,他们用的原生态的东西,还有分隔符什么的,对于我这种http盲的家伙实在是无从下手,所以希望这里麻烦指导一下

我是把字符串单独转成byte,例如这样:
byte[] Bi_str = Encoding.UTF8.GetBytes("&a=111111&b=222&c=33333");
然后再跟stream 转成的byte[]合成一个,但是这样不行
 楼主| 发表于 2014-10-15 22:57:21 | 显示全部楼层
我用了如下的方法,发觉是可以的,你看下这样写是否正确,代码较多,我只大概描述一下:

定义一个boundary
[C#] 纯文本查看 复制代码
 string boundary = "------httpboundary";

然后用下面的代码来加字符串参数
[C#] 纯文本查看 复制代码
StringBuilder s = new StringBuilder();
s.Append("--").Append(boundary).Append("\r\n");
s.Append("Content-Disposition:  form-data;  name=\"a\"\r\n\r\n11111111111111\r\n");

s.Append("--").Append(boundary).Append("\r\n");
s.Append("Content-Disposition:  form-data;  name=\"b\"\r\n\r\n222222\r\n");
AppendString(s.ToString());  --把该段字符串加入主byte[]

把以上的字符串s转成byte[]

接着用下面的代码把stream转成byte[],并加个上面的byte[]中
[C#] 纯文本查看 复制代码
s.Append("--").Append(boundary).Append("\r\n");
s.Append("Content-Disposition:  form-data;  name=\"d\";  filename=\"ddddd\"\r\n");
s.Append("Content-Type: application/octet-stream\r\n\r\n");
AppendString(s.ToString());  --把该段字符串加入主byte[]

Stream S = HttpContext.Current.Request.InputStream;
byte[] b = new byte[S.Length];
S.Read(b, 0, b.Length);
AppendBytes(b);  --把stream加入主byte[]
AppendString("\r\n");  
s.Append("--").Append(boundary).Append("--\r\n");
s.Append("\r\n");  --结束主byte[]


然后把上面得到的byte[]写入PostdataByte中,并修改
ContentType= "multipart/form-data; boundary=------------httpboundary";
代码如下:
[C#] 纯文本查看 复制代码
 Method = "POST",
PostDataType = PostDataType.Byte,
PostdataByte = 主byte[],
ContentType = "multipart/form-data; boundary=------httpboundary",
ResultType = ResultType.String


我测试是通过了,但是感觉好麻烦,有简单点的方法吗
发表于 2014-10-16 08:40:11 | 显示全部楼层
zqsrain 发表于 2014-10-15 22:57
我用了如下的方法,发觉是可以的,你看下这样写是否正确,代码较多,我只大概描述一下:

定义一个bounda ...

那就行用吧,有时间我优化一下Httphelper
 楼主| 发表于 2014-10-22 16:55:14 | 显示全部楼层
呃,好吧,谢谢飞哥
发表于 2020-4-2 18:06:49 | 显示全部楼层
楼主 ,我也遇到这个问题了,您提供的AppendBytes  方法,能提供一下吗:
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-24 08:17

© 2014-2021

快速回复 返回顶部 返回列表