如何在不编码所有数据的情况下进行POST调用?

时间:2011-12-16 22:33:10

标签: php file http encoding upload

我正在尝试模拟POST调用/ fileupload,因此我可以通过编程方式进行操作,而不是使用笨重过时的应用程序。

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

<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... 

(on and on and on)

所以,服务器端自然会对我的愚蠢情绪感到震惊,并且对我和我所爱的人说了很多可怕的事情,而不是接受这个文件。

有什么想法吗?

好吧,我没有发布我的代码的原因是因为它只是一个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调用如下所示

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

1 个答案:

答案 0 :(得分:0)

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

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