我正在尝试模拟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调用如下所示
如果我提交此服务器将响应“错误:输入字符串格式不正确。”,我认为这是因为服务器期望数据是某种格式和长度。所以我的目标是弄清楚为什么我的数据看起来不像传统的“最终”数据,第一步是弄清楚为什么我的数据看起来像那样。
答案 0 :(得分:0)
如果我理解你的问题,你应该使用htmlspecialchars而不是rawurlencode。 Urlencode用于HTTP,而不是HTML,而且您的数据似乎已经编码,因此您只需对其进行两次编码。
或者,您可以使用cURL从服务器发送帖子,并完全避免HTML表单混乱。