Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];

Вниз

Отправка файла POST-запросом...   Найти похожие ветки 

 
Max.66RUS   (2008-01-26 23:36) [0]

Добрый день. Необходимо решить следующую задачу - есть следующий простейший PHP-скрипт:

<?
$ip=getenv("REMOTE_ADDR");
$filename=$_POST["fname"];
$data=$_POST["data"];
$fp=fopen($ip."_".$filename, "w");
fwrite($fp, $data);
fclose($fp);
?>


На него нужно POST запросом отправит файл(тип файла может быть любой, например RAR архив) из Delphi приложения. После долгих поисков в сети почти нашел решение данной задачи при помощи вот такого кода:

Uses WinInet;

Const
Host: PChar="хост";
Path: PChar="путь до скрипта";

Function GetFileData(szFile: PChar): PChar;
Var
hFile, dwSize, dwBytes: DWORD;
Begin
Result:="";
hFile:=CreateFile(szFile, GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
If hFile<>INVALID_HANDLE_VALUE then
Begin
dwSize:=GetFileSize(hFile, nil);
Result:=VirtualAlloc(nil, dwSize, MEM_COMMIT, PAGE_READWRITE);
ReadFile(hFile, Result^, dwSize, dwBytes, nil);
End;
CloseHandle(hFile);
End;

Procedure SendPOSTData(Const szHost, szPath, szData: PChar);
Var
hOpenHandle, hConnectHandle, hResourceHandle: Pointer;
Begin
hOpenHandle:=InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
If hOpenHandle<>nil then
Begin
hConnectHandle:=InternetConnect(hOpenHandle, szHost, 80, nil, nil, 3, 0, 0);
If hConnectHandle<>nil then
Begin
hResourceHandle:=HttpOpenRequest(hConnectHandle, "POST", szPath, nil, nil, nil, INTERNET_FLAG_KEEP_CONNECTION, 0);
If hResourceHandle<>nil then
Begin
HttpSendRequest(hResourceHandle, "Content-Type: application/x-www-form-urlencoded", 47, szData, lstrlen(szData));
End;
InternetCloseHandle(hResourceHandle);
End;
InternetCloseHandle(hConnectHandle);
End;
InternetCloseHandle(hOpenHandle);
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
ZeroMemory(@szBuf, SizeOf(szBuf));
lstrcpy(szBuf, PChar("fname=файл.txt&data="));
lstrcat(szBuf, ((GetFileData(PChar("C:/файл.txt")))));
SendPOSTData(Host, Path, szBuf);
End;


Данный код прекрасно работает и выполняет свою задачу кроме одного очень неприятного момента, если например в отправляемом текстовом(или любом другом файле) содержатся символы " или ", то после загрузки файла на хост данные символы в файле преобразуются в сочетание \" или \". Т.е. если до отправки в текстовом файле был текст:

aaa"bbb"

То после загрузки на хост содержимое файла меняется на:

aaa\"bbb\"

Для текстовых файлов данное изменение не критично, но вот например для исполняемых очень. Т.к. после загрузки на хост исполняемый файл становится неработоспособным.

Подскажите - как эту проблему исправить? Нужно чтобы файлы загружались без изменений... Сначала думал, что тут дело в параметре Content-Type: application/x-www-form-urlencoded, изменил его на Content-Type: application/octet-stream - приложение вообще перестало работать, т.е. файлы не загружались на хост...( В общем помогите...


 
Nucer   (2008-01-27 11:28) [1]

В скрипте надо использовать функции is_uploaded_file, move_uploaded_file.


 
ketmar ©   (2008-01-27 13:04) [2]

барин, а вы вообще в курсе, что такое content-type и зачем оно надо? а также чем отличается octet-stream от url-encoded? и что у php, вообще-то, документация есть?


 
имя   (2009-01-22 05:50) [3]

Удалено модератором


 
имя   (2009-02-20 22:35) [4]

Удалено модератором



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1291739016
Ux
2010-12-07 19:23
2011.02.27
Ошибка 11004


15-1290150470
И. Павел
2010-11-19 10:07
2011.02.27
Установка программ в "Application Data"


15-1289897307
vajo
2010-11-16 11:48
2011.02.27
Контроль печати принтера


8-1210567473
namco
2008-05-12 08:44
2011.02.27
видео кодеки


15-1289644609
ixen
2010-11-13 13:36
2011.02.27
Локализация DevExpress





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский