【问题标题】:Http Post Request with Boundry Error Bad Request带有边界错误错误请求的 Http Post 请求
【发布时间】:2013-03-05 17:51:57
【问题描述】:

您好,我正在尝试执行 Http Post 请求,但收到错误请求的错误,如果有人可以帮助我,我认为我在请求中做错了什么。

这是请求

     POST /uapi/faxes/@me/0003*210 HTTP/1.1
     HOST uapi.voipnow.com
     Content-Length:469
     Content-Type: multipart/form-data; boundary=------------325343636
     ------------325343636-------- 
     Content-Disposition:form-data; name="files"; filename="/path/to/file/fax.txt"
     Content-Type;application/octet-stream

     This is my fax
     ------------325343636
     Content-Disposition:form-data; name="request";
     {
       "recipients":["7778888"]
     }
     ------------3253436360

这是我的请求代码

        try
           {
             String Token = "mytoken";
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
            HttpWebRequest httpWReq2 = (HttpWebRequest)WebRequest.Create("https://domainname/uapi/faxes/@me/0014*100/?accessRequestToken=" + Token);

            ASCIIEncoding encoding2 = new ASCIIEncoding();
            string postData2 =
            "------------325343636" + Environment.NewLine +
            "Content-Disposition:form-data; name=\"files\";filename=\"/path/to/file/fax.txt\";" + Environment.NewLine +
            "Content-Type:application/octet-stream;" + Environment.NewLine +
            "This is my fax" + Environment.NewLine +
            "------------325343636" + Environment.NewLine +
            "Content-Disposition:form-data; name=\"request\";" + Environment.NewLine +
            "{" + Environment.NewLine +
            "\"recipients\":[\"111111\"];" + Environment.NewLine +
            "}" + Environment.NewLine +
            "------------325343636";

            byte[] data2 = encoding2.GetBytes(postData2);
            httpWReq2.Method = "POST";
            httpWReq2.ContentType = "multipart/form-data; boundary=------------325343636";
            httpWReq2.KeepAlive = true;
            httpWReq2.UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17";
            httpWReq2.ContentLength =data2.Length;
            httpWReq2.Host = "hostname";
            string result2 = "";

            Stream dataStream2 = httpWReq2.GetRequestStream();
            dataStream2.Write(data2, 0, data2.Length);
            dataStream2.Close();
            WebResponse response2 = httpWReq2.GetResponse();
            HttpWebResponse responce3 = (HttpWebResponse)httpWReq2.GetResponse();
            dataStream2 = response2.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader2 = new StreamReader(dataStream2);
            // Read the content.
            string responseFromServer2 = reader2.ReadToEnd();
           }

            catch (Exception ex)
        {
            WebException ex2 = (WebException)ex;
            if (ex2.Status == WebExceptionStatus.ProtocolError)
            {
                WebResponse resp = ex2.Response;
                using (Stream respstream = resp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respstream);
                    String finalerror = reader.ReadToEnd();
                }
            }

        }

错误

收件人参数中提供的值丢失或无效。这 参数必须引用任何电话号码

【问题讨论】:

  • 您要发布到哪个服务器?这是特定于供应商的。
  • @DanielA.White ye 先生,您是对的,这是特定于供应商的。我想知道我的请求中的 PostData 有什么问题。
  • @DiskJunky 我认为 Content length 应该与 PostData Length 相同,我错了吗?
  • 您应该详细说明您要发布到哪个服务器。它不可能知道它到底在期待什么。

标签: c# http-post


【解决方案1】:

哦,我看到了一个潜在的问题。看起来您发送的是 JSON 对象而不是表单编码值。

 ------------325343636
 Content-Disposition:form-data; name="request";
 recipients=7778888
 ------------3253436360

尝试这些方法。

【讨论】:

  • 所以在我的代码中更改应该是“{”+ Environment.NewLine +“recipients:111111”+ Environment.NewLine +“}”+Environment.NewLine + 我试试这个但仍然得到sam错误
  • @Hiren 我需要来自 api 的示例请求
【解决方案2】:

你的界限不匹配。

 POST /uapi/faxes/@me/0003*210 HTTP/1.1
 HOST uapi.voipnow.com
 Content-Length:469
 Content-Type: multipart/form-data; boundary=------------325343636
 --------------325343636
 Content-Disposition:form-data; name="files"; filename="/path/to/file/fax.txt"
 Content-Type;application/octet-stream

 This is my fax
 --------------325343636
 Content-Disposition:form-data; name="request";
 {
   "recipients":["7778888"]
 }
 --------------325343636--

你的边界应该是--(两个连字符)+你的边界。最后一个边界应遵循相同的公式,并在末尾添加 --(两个连字符)。

在您的示例中,您的结束边界不同,并且边界前面没有额外的两个连字符。

为了澄清一点,如果你的边界是“边界”,它看起来像这样:

 POST /uapi/faxes/@me/0003*210 HTTP/1.1
 HOST uapi.voipnow.com
 Content-Length:469
 Content-Type: multipart/form-data; boundary=a boundary
 --a boundary
 Content-Disposition:form-data; name="files"; filename="/path/to/file/fax.txt"
 Content-Type;application/octet-stream

 This is my fax
 --a boundary
 Content-Disposition:form-data; name="request";
 {
   "recipients":["7778888"]
 }
 --a boundary--

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2017-09-12
    相关资源
    最近更新 更多