云鹤翔天 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;
        }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误