C# post 模拟提交multipart/form-data的问题

注册用户的时候,post的数据是这样的

—————————–309723120027804

Content-Disposition: form-data; name=”regsubmit”

yes

—————————–309723120027804

Content-Disposition: form-data; name=”formhash”

8d099a46

—————————–309723120027804

Content-Disposition: form-data; name=”referer”

http://club.*******.com/./————————-这是网站

—————————–309723120027804

Content-Disposition: form-data; name=”activationauth”

Content-Disposition: form-data; name=”agreebbrule”

454b7635

—————————–309723120027804

Content-Disposition: form-data; name=”x7uH0V”

注册用户名

—————————–309723120027804

Content-Disposition: form-data; name=”RpRk10″

密码

—————————–309723120027804

Content-Disposition: form-data; name=”djzWdq”

密码

—————————–309723120027804

Content-Disposition: form-data; name=”Xc8eDO”

sssss@126.com

—————————–309723120027804

Content-Disposition: form-data; name=”regsubmit”

提交

—————————–309723120027804–

我用如下方法提交数据,不知道为啥总是返回“抱歉,密码空或包含非法字符”。

没找出错误的地方。还是提交multipart/form-data不能这样写呢?

public string[] PostMethodMulti(string Postdata, string Urllogin, string Urlreffer, string boundary, string proxy)//temp[0]返回网页temp[1]返回cookies

{

try

{

request = (HttpWebRequest)WebRequest.Create(Urllogin);//实例化web访问类

if (proxy != “”)

{

request.Proxy = new WebProxy(proxy, true);

request.Timeout = 2000;

}

request.Method = “POST”;//数据提交方式为POST

request.ContentType = “multipart/form-data; boundary=” + boundary;

byte[] postdatabytes = Encoding.UTF8.GetBytes(Postdata);

request.Accept = “text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”;

request.ContentLength = postdatabytes.Length;

request.CookieContainer = cc;

request.AllowAutoRedirect = false;

request.KeepAlive = true;

request.UserAgent = “Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30”;

System.Net.Cache.HttpRequestCachePolicy policy = new System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.NoCacheNoStore);

request.CachePolicy = policy;

request.Headers.Add(“Accept-Encoding:gzip, deflate”);

request.Headers.Add(“Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3”);

Stream stream;

stream = request.GetRequestStream();

stream.Write(postdatabytes, 0, postdatabytes.Length);

stream.Close();

//接收响应

response = (HttpWebResponse)request.GetResponse();

//保存返回cookie

response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);

CookieCollection cook = response.Cookies;

string strcrook = request.CookieContainer.GetCookieHeader(request.RequestUri);

// Cookiesstr = strcrook;

//取第一次GET跳转地址

// string strcrook = response.GetResponseHeader(“Set-Cookie”);

Stream responseStream = response.GetResponseStream();

//如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可

if (response.Headers[“Content-Encoding”] != null && response.Headers[“Content-Encoding”].ToLower().Contains(“gzip”))

{

responseStream = new GZipStream(responseStream, CompressionMode.Decompress);

}

StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);

temp[0] = streamReader.ReadToEnd();

streamReader.Close();

responseStream.Close();

temp[1] = strcrook;

response.Close();

return temp;

}

catch (Exception e1)

{

temp[0] = e1.ToString();

return temp;

}

}

——解决思路———————-

注册用户名,有没有进行编码?

——解决思路———————-

先提交到你自己的 aspx或者ashx 服务,看看能不能得到所有的参数?

——解决思路———————-

涉及到通信的东西,好歹你自己得同时会做服务端和客户端,然后自己能够跟自己做的程序通信测试

直接去跟别人的程序通信,哪里出了问题没法查

——解决思路———————-

引用:注册用户的时候,post的数据是这样的

—————————–309723120027804

Content-Disposition: form-data; name=”regsubmit”

yes

—————————–309723120027804

Content-Disposition: form-data; name=”formhash”

8d099a46

—————————–309723120027804

Content-Disposition: form-data; name=”referer”

http://club.*******.com/./————————-这是网站

—————————–309723120027804

Content-Disposition: form-data; name=”activationauth”

Content-Disposition: form-data; name=”agreebbrule”

454b7635

—————————–309723120027804

Content-Disposition: form-data; name=”x7uH0V”

注册用户名

—————————–309723120027804

Content-Disposition: form-data; name=”RpRk10″

密码

—————————–309723120027804

Content-Disposition: form-data; name=”djzWdq”

密码

—————————–309723120027804

Content-Disposition: form-data; name=”Xc8eDO”

sssss@126.com

—————————–309723120027804

Content-Disposition: form-data; name=”regsubmit”

提交

—————————–309723120027804–

我用如下方法提交数据,不知道为啥总是返回“抱歉,密码空或包含非法字符”。

没找出错误的地方。还是提交multipart/form-data不能这样写呢?

public string[] PostMethodMulti(string Postdata, string Urllogin, string Urlreffer, string boundary, string proxy)//temp[0]返回网页temp[1]返回cookies

{

try

{

request = (HttpWebRequest)WebRequest.Create(Urllogin);//实例化web访问类

if (proxy != “”)

{

request.Proxy = new WebProxy(proxy, true);

request.Timeout = 2000;

}

request.Method = “POST”;//数据提交方式为POST

request.ContentType = “multipart/form-data; boundary=” + boundary;

byte[] postdatabytes = Encoding.UTF8.GetBytes(Postdata);

request.Accept = “text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”;

request.ContentLength = postdatabytes.Length;

request.CookieContainer = cc;

request.AllowAutoRedirect = false;

request.KeepAlive = true;

request.UserAgent = “Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30”;

System.Net.Cache.HttpRequestCachePolicy policy = new System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.NoCacheNoStore);

request.CachePolicy = policy;

request.Headers.Add(“Accept-Encoding:gzip, deflate”);

request.Headers.Add(“Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3”);

Stream stream;

stream = request.GetRequestStream();

stream.Write(postdatabytes, 0, postdatabytes.Length);

stream.Close();

//接收响应

response = (HttpWebResponse)request.GetResponse();

//保存返回cookie

response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);

CookieCollection cook = response.Cookies;

string strcrook = request.CookieContainer.GetCookieHeader(request.RequestUri);

// Cookiesstr = strcrook;

//取第一次GET跳转地址

// string strcrook = response.GetResponseHeader(“Set-Cookie”);

Stream responseStream = response.GetResponseStream();

//如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可

if (response.Headers[“Content-Encoding”] != null && response.Headers[“Content-Encoding”].ToLower().Contains(“gzip”))

{

responseStream = new GZipStream(responseStream, CompressionMode.Decompress);

}

StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);

temp[0] = streamReader.ReadToEnd();

streamReader.Close();

responseStream.Close();

temp[1] = strcrook;

response.Close();

return temp;

}

catch (Exception e1)

{

temp[0] = e1.ToString();

return temp;

}

}

这个工具能帮助你实现。

http://www.sufeinet.com/thread-11995-1-1.html

——解决思路———————-

using (var client = new HttpClient())

{

using (var content = new MultipartFormDataContent())

{

var txtContent = new ByteArrayContent(Encoding.UTF8.GetBytes(“123”));

txtContent.Headers.ContentDisposition = new ContentDispositionHeaderValue(“attachment”)

{

Name = “ID”

};

content.Add(txtContent);

txtContent = new ByteArrayContent(Encoding.UTF8.GetBytes(“ABCDEFGH12345678”));

txtContent.Headers.ContentDisposition = new ContentDispositionHeaderValue(“attachment”)

{

Name = “Name”

};

content.Add(txtContent);

var result = client.PostAsync(“/api/values/1”, content).Result;

this.textBox1.Text = result.Content.ReadAsStringAsync().Result;

Console.WriteLine(result.StatusCode);

}

}

HttpClient的方式提交,因为你用的FormData方式提交,那么每个都必须一个个写


版权声明:本文为weixin_28825959原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_28825959/article/details/112952713