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