云鹤翔天 2016-08-03 02:13 采纳率: 0%
浏览 1986
已结题

HttpWebResponse的Post发包问题

c#中用HttpWebResponse类进行Post发包,发包的数据格式是multipart/form-data;
有两个网址:
http://hpcgi2.nifty.com/tono-k/bbs/bbs.cgi
http://handaipfc.com/cgi-bin/imgboard.cgi
我已经写好了发包的方法,测试第一地址是发包成功的,但是对第二个地址却不成功,不知道什么原因,有没有高手帮忙看一下.
发包的数据:
-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="bbsaction"

post

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="page"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="view_mode"

as_cgi_defined

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="blood"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="parent"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="prebbsaction"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="amode"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="p1"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="p2"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="target"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="target_no"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="sf"

針つゆシ灰み

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="onetime_token"

aSB2BUxsBU

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="optB"

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="body"

昔を追憶する

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="name"

昔を追憶する

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="subject"

昔を追憶する

-----------------------------8d3bb8669ffe4f1
Content-Disposition: form-data; name="img"; filename=""
Content-Type: application/octet-stream

-----------------------------8d3bb8669ffe4f1--

  • 写回答

6条回答

  • 云鹤翔天 2016-08-03 02:21
    关注

    private static string HttpPostTest(string url, int timeOut, NameValueCollection stringDict)
    {
    string responseContent;
    var memStream = new MemoryStream();
    var webRequest = (HttpWebRequest)WebRequest.Create(url);
    // 边界符

    var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
    // 边界符

    var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
    var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");

            // 设置属性  
            webRequest.Method = "POST";
            webRequest.Timeout = timeOut;
            webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
            memStream.Write(beginBoundary, 0, beginBoundary.Length);
            // 写入字符串的Key  
            var stringKeyHeader = "\r\n--" + boundary +
                                   "\r\nContent-Disposition: form-data; name=\"{0}\"" +
                                   "\r\n\r\n{1}\r\n";
    
            foreach (byte[] formitembytes in from string key in stringDict.Keys
                                             select string.Format(stringKeyHeader, key, stringDict[key])
                                                 into formitem
                                                 select Encoding.UTF8.GetBytes(formitem))
            {
                memStream.Write(formitembytes, 0, formitembytes.Length);
            }
    
            // 写入最后的结束边界符  
            memStream.Write(endBoundary, 0, endBoundary.Length);
    
            webRequest.ContentLength = memStream.Length;
            string sss = System.Text.Encoding.Default.GetString(memStream.ToArray());
            var requestStream = webRequest.GetRequestStream();
    
            memStream.Position = 0;
            var tempBuffer = new byte[memStream.Length];
            memStream.Read(tempBuffer, 0, tempBuffer.Length);
            memStream.Close();
    
            requestStream.Write(tempBuffer, 0, tempBuffer.Length);
            requestStream.Close();
    
            var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();
    
            using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("shift_jis")))
            {
                responseContent = httpStreamReader.ReadToEnd();
            }
    
            httpWebResponse.Close();
            webRequest.Abort();
            return responseContent;
        }
    
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能