Как сделать POST-вызов без кодирования всех данных? - PullRequest
2 голосов
/ 17 декабря 2011

Я пытаюсь эмулировать вызов 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... 

(и дальше и дальше)

так, естественно, серверная сторона ошеломлена моей глупостью и говорит ужасные вещи обо мне и моих близких, а не принимает файл.

Есть идеи?

Ну, причина, по которой я не опубликовал свой код, заключается в том, что он буквально всего лишь одна запись в форме 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 голосов
/ 17 декабря 2011

Если я правильно понимаю вашу проблему, вы должны использовать htmlspecialchars вместо rawurlencode.Urlencode используется для HTTP, а не HTML, плюс ваши данные, похоже, уже закодированы, поэтому вы просто кодируете их дважды.

В качестве альтернативы, вы можете использовать cURL для отправки сообщения с сервера и избежать путаницы в форме HTMLв целом.

...