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


How do I make a POST call without encoding all of the data?

我正在尝试模拟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表单混乱。