【问题标题】:How do I make a POST call without encoding all of the data?如何在不对所有数据进行编码的情况下进行 POST 调用?
【发布时间】:2012-01-22 09:04:39
【问题描述】:

我正在尝试模拟 POST 调用/文件上传,以便我可以通过编程方式完成,而不是使用笨重过时的应用程序。

我尝试的模拟中的表单字段如下所示

<Input Type=text name="data" value="begin+600+%7B_TRACK_NAME_%7D%0D%0AM240S...">

根据我的HTTP流量分析器,原来的版本是这样的

data=begin+600+%7b%5fTRACK%5fNAME%5f%7d%0d%0aM240S... 

(一直在不断,而且是分块上传,所以有几十个这样的帖子)

当我尝试我的 POST 调用(来自 PHP 表单)时,它会发送这个

data=begin%2B600%2B%257B_TRACK_NAME_%257D%250D%250AM240S... 

(不断地不断地)

所以,服务器端自然会对我的愚蠢感到震惊,并说我和我所爱的人的坏话,而不是接受文件。

有什么想法吗?

嗯,我没有发布我的代码的原因是因为它实际上只是一个 PHP 表单帖子。意思...如果我只是获取我发布的数据并手动发送它,而不是以编程方式生成该数据,我会得到同样的错误。

但是,如果它有帮助,我将使用的代码看起来像这样。

// Opening the file and loading into the variable $contents

$filename = "sample.mp3";
$handle = fopen($filename,"r");
$contents = fread($handle, filesize($filename));
fclose($handle);

// uu_encoding the string

$uu_string = convert_uuencode($contents);

// the first line BEFORE uu_encoding looks like
//  ID39TTrandomCOMengiTunPGAP0TENiTunes 10.5.1COMhe  
//  (it's an MP3)

// the first line AFTER uu_encoding looks like
//  M240S`@`````0.514,@``"`!R86YD;VT`0T]-```0`&5N9VE4=6Y01T%0

// url_encoding the uu_encoded string    
$url_string = rawurlencode($uu_string);

// the first line after url_encoding looks like
// M240S%60%40%60%60%60%60%600.514%2C...

<form action="target.aspx">
<Input Type=text name="data" value="<? echo $url_string; ?>">
<Input Type=Submit>
</form>

提交后,POST 调用如下所示

如果我提交此内容,服务器将响应“错误:输入字符串的格式不正确。”,我认为这是因为服务器期望数据具有一定的格式和长度。所以我的目标是弄清楚为什么我的数据看起来不像传统的“最终”数据,第一步是弄清楚为什么我的数据看起来像那样。

【问题讨论】:

  • 你的代码是什么样的?
  • 你不能用urldecode()修复它吗?
  • 如果您发布不起作用的代码示例以及服务器暗杀您的角色的实际错误消息,人们将能够更好地提供帮助。

标签: php file http encoding upload


【解决方案1】:

如果我正确理解您的问题,您应该使用 htmlspecialchars 而不是 rawurlencode。 Urlencode 用于 HTTP,而不是 HTML,而且您的数据似乎已经编码,因此您只需对其进行两次编码。

或者,您可以使用 cURL 从服务器发送帖子,完全避免 HTML 表单混乱。

【讨论】:

  • 这不能正常工作。尽管我已经越来越接近解决方案,但当前的问题是 url_encode 实际上并没有将我的 +"."s 转换为 "%2e",它让他们独自一人。这是……也许是问题所在。 PHP 手册说这是设计使然,但 W3Schools 建议它实际上应该转换这些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 2011-11-10
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多