ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

27.07.2009, 10:02
|
|
Познающий
Регистрация: 15.02.2009
Сообщений: 54
Провел на форуме: 142825
Репутация:
7
|
|
Здравствуйте, есть вопрос про указатель ввода. Необходимо, чтобы, например, при событии onChange в TEdit указатель устанавливался на самый последний символ. От этого нужно, чтоб при Edit1.SetFocus; но при СэтФокус, естественно, он становится вначало... Можно ли такое вообще организовать?
|
|
|

27.07.2009, 11:19
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.SelStart := Length(Edit1.text);
end;
|
|
|

27.07.2009, 11:49
|
|
Познающий
Регистрация: 15.02.2009
Сообщений: 54
Провел на форуме: 142825
Репутация:
7
|
|
Для slesh: вот спасибо, только сделал не на onChange, а на onKeyPress. Просто делаю, фильтр символов. Нужны только числа, ну и с минусом проблемы начались. Вот, и мне показалось, что так будет намного легче... +++
|
|
|

27.07.2009, 18:51
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
Провел на форуме: 5209663
Репутация:
357
|
|
Нужно сделать примерно так:
(Код на руском языке)
Делать пока в мемо есть строчки
---
эдит1.текст = 1 строчка мемо
удалить первую строчку мемо
---
То что между --- надо делать пока в мемо есть строчки...
|
|
|

27.07.2009, 19:43
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
фильтрация тут простая:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','-',#8]) then key := #0;
end;
#8 - это код бекспейса. Это для того чтобы можно было бы стереть символ.
Ну и можно еще добавить туда символ точки или зяпятой чтобы можно былобы вводить еще и дробные числа
|
|
|

28.07.2009, 01:32
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме: 5749763
Репутация:
1680
|
|
В общем такой вопрос, надо скрипту отправить файл на WinInet (именно через WinInet)
Я использую функцию:
Код:
procedure SendPOSTData(const szHost, szPath, szData,header: PChar);
var
szHeaders: PChar;
hOpenHandle,
hConnectHandle,
hResourceHandle: Pointer;
ListBox1:tListBox;
begin
hOpenHandle := InternetOpen(nil, 0, 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,header,47,szData,lstrlen(szData));
end;
InternetCloseHandle(hResourceHandle);
end;
InternetCloseHandle(hConnectHandle);
end;
InternetCloseHandle(hOpenHandle);
end;
То есть первый параметр это хост, второй это путь до скрипта, третий это POST дата, а четвёртый это заголовок.
Вызываю функцию так:
SendPOSTData('site.fr','/index.php',PChar(memo1.text),PChar(memo2.text));
А теперь самое интересное, в memo2 я вставляю заголовок:
Код:
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------235351862919679
Ну а в POST (memo1) я вставляю это:
Код:
-----------------------------235351862919679
Content-Disposition: form-data; name="userfile"; filename="test.txt"
Content-Type: text/plain
LOL
-----------------------------235351862919679--
В итоге файл не заливается.
name="userfile"; указанно правильно (на скрипте так приём файла обозначен).
Вроде бы в коде всё правильно, заголовки и POST дату я указал так как нужно, величину контента функция потсчитывает автоматом.
Подскажите плиз где тут ошибка? Может я что то забыл указать в заголовке или POST запросе?
|
|
|

28.07.2009, 05:03
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Хидер host нужно указать, может достаточно будет
|
|
|

28.07.2009, 05:11
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме: 5749763
Репутация:
1680
|
|
Сообщение от Joker-jar
Хидер host нужно указать, может достаточно будет
Так он уже указан в функции.
Обычные POST запросы вида:
lol1=1&lol2=2
нормально работают, а вот передать файл никак не удаётся.
|
|
|

28.07.2009, 09:32
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
так файлы кидаются через мультипарт форму где всё оформляется по другому.
|
|
|

28.07.2009, 10:36
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Еще были ошибки в коде - не в том месте закрывались хендлы.
Проводим простой следственный эксперимент.
Берем PHP файл через который будем грузить чтонить
PHP код:
<form action="?act=upload" method="POST" enctype="multipart/form-data">
<input type="text" name="info">
<input type="file" name="myfile">
<input type="submit" value="UPLOAD">
</form>
<?
if ($_GET['act'] == 'upload')
{
$name = $_FILES['myfile']['name'];
$myfile=$_FILES['myfile']['tmp_name'];
if (!file_exists($myfile))
{
echo '<h3>Error</h3>';
}
else
{
Copy($myfile, $name);
echo "<h3>OK</h3><br>{$_POST['info']}";
}
}
?>
Через снифер получаем данные:
POST /1.php?act=upload HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1/1.php
Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 769
-----------------------------41184676334
Content-Disposition: form-data; name="info"
infodata
-----------------------------41184676334
Content-Disposition: form-data; name="myfile"; filename="test.txt"
Content-Type: text/plain
this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file this is test file
-----------------------------41184676334--
Теперь на основании этих данных очень просто построить запрос.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
hOpenHandle, hConnectHandle, hResourceHandle: Pointer;
boundary:string;
header, data:string;
begin
hOpenHandle := InternetOpen(nil, 0, nil, nil, 0);
if hOpenHandle <> nil then
begin
hConnectHandle := InternetConnect(hOpenHandle, '127.0.0.1', 80, nil, nil, 3, 0, 0);
if hConnectHandle <> nil then
begin
hResourceHandle := HttpOpenRequest(hConnectHandle, 'POST', '/1.php?act=upload', nil, nil, nil, INTERNET_FLAG_KEEP_CONNECTION, 0);
if hResourceHandle <> nil then
begin
boundary := inttostr(random(65355))+inttostr(random(65355))+inttostr(random(65355));
header := 'Content-Type: multipart/form-data; boundary='+boundary;
data := '--'+boundary+#13#10+
'Content-Disposition: form-data; name="info"'#13#10#13#10+edit1.Text+#13#10+
'--'+boundary+#13#10+
'Content-Disposition: form-data; name="myfile"; filename="test.txt"'#13#10+
'Content-Type: text/plain'#13#10#13#10+memo1.Text+#13#10+
'--'+boundary+'--';
HttpSendRequest(hResourceHandle, @header[1], length(header), @data[1], length(data));
InternetCloseHandle(hResourceHandle);
end;
InternetCloseHandle(hConnectHandle);
end;
InternetCloseHandle(hOpenHandle);
end;
end;
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|