【问题标题】:HTTP multipart/form-data over Socket does not show the variablesHTTP multipart/form-data over Socket 不显示变量
【发布时间】:2012-08-09 12:07:52
【问题描述】:

我现在已经尝试了几个小时,但不知何故我没有弄清楚问题所在。这是我的请求示例:

POST /test/upload/upload.php HTTP/1.0
Host: localhost
User-Agent: TestBrowser
Content-Type: multipart/form-data, boundary=635131229269 //edited
Content-Length: 94

--635131229269
Content-Disposition: form-data; name="testme"

contender
--635131229269--

它通过标准 TCP/IP 套接字发送到 PHP 服务器,但 $_POST['testme'] 值始终为空。

有人可以看到此请求中的错误吗? --> 解决了

末尾有一个\r\n,这里的代码中没有显示。

谢谢,这解决了我的第一个问题。

也许你也可以帮助我解决我的第二个问题。正如我在您的个人资料中看到的那样,您对 C# 非常熟悉,这是我的第二个问题。我正在尝试将文件上传到我的服务器,并且文件数据以某种方式没有正确请求,我认为这是因为编码,但我不确定。

_content = _content
     + "--" + boundary + Environment.NewLine
     + "Content-Disposition: form-data; name=\"" + this._FileVarName + "\"; filename=\"" + Path.GetFileName(this._FilePath) + "\""
     + Environment.NewLine + "Content-Transfer-Encoding: application/octet-stream"
     + Environment.NewLine + Environment.NewLine;

mainContent = this.Combine(Encoding.UTF8.GetBytes(_content), StreamFile(this._FilePath));

private Byte[] StreamFile(string Path)
{
  FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read);
  Byte[] ImageData = new byte[fs.Length];
  fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length));
  fs.Close();
  return ImageData;
}

【问题讨论】:

  • 您应该提出一个新问题并链接到此问题,而不是提出第二个问题。
  • 三年后,真的吗??

标签: http post multipart multipartform-data form-data


【解决方案1】:

您必须在没有前导破折号的情况下指定边界(在第 4 行)。另外我只计算了 92 字节的有效载荷。

【讨论】:

  • 谢谢,就是这样,但现在下一个(见上文)
  • @DaMaex 尝试为此打开一个新问题,并请显示您尝试过的内容以及正在发送的数据(例如使用Fiddler)。
【解决方案2】:

为了让这个答案更完整一点,“multipart/form-data”后面必须有一个分号(参见w3c forms spec

Content-Type: multipart/form-data; boundary=635131229269

【讨论】:

  • 当然,它有点老了,但是我也已经看过了,不过也谢谢你。
猜你喜欢
  • 2019-12-03
  • 2011-09-29
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多