-
alekseyi © (26.02.10 10:48) [0]здравствуйте! У меня проблема нужно выполнить post запрос, но сервер отвечает:
HTTP/1.1 400 Bad Request
Date: Fri, 26 Feb 2010 20:30:48 GMT
Server: Oracle-Application-Server-10g/10.1.2.0.0 Oracle-HTTP-Server
Connection: close
Content-Type: text/html; charset=iso-8859-1
не могу найти причину помогите пожалуйста!
вот исходник программы:
unit postU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
WebServer = 'xxx';
WebPort = 7780;
PostAddr = '/pls/htmldb/'; //wwv_flow.accept
HTTP_Data =
'Content-Type: application/x-www-form-urlencoded'+#13#10+
'from: mymail@mail.ru'+#13#10+
'User-Agent: IE ()'+#13#10+
'Host: xxx'+#13#10+
'Referer: http://xxx/pls/htmldb'+#13#10+
'Connection: Keep-Alive'+#13#10;
var
Form1: TForm1;
FContent:string;
FResult:string;
HTTP_POST : string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
FContent:=
'p_flow_id="119"'+#13#10+
'p_flow_step_id="101"'+#13#10+
'p_instance="329311196309813"'+#13#10+
'p_page_submission_id="2561758"'+#13#10+
'p_request=""'+#13#10+
'p_arg_names="325219607430380413"'+#13#10+
'p_t01="login xxx"'+#13#10+
'p_arg_names="325219682021380416"'+#13#10+
'p_t02="password xxx"'+#13#10+
'p_md5_checksum=""'#13#10;
FContent:=
'Content-Length: '+IntToStr(Length(FContent))+#13#10+
FContent;
HTTP_POST := 'POST http: //'+WebServer+PostAddr+
' HTTP/1.0'+#13#10;
form1.ClientSocket1.Host:=webserver;
form1.ClientSocket1.Port:=webport;
HTTP_Post := HTTP_Post + HTTP_Data;
form1.ClientSocket1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.ClientSocket1.Socket.SendText(form1.edit1.Text);
form1.Memo1.Lines.Insert(0,'>>> '+form1.edit1.Text);
end;
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
Fresult:=Fresult+socket.ReceiveText;
form1.Memo1.Lines.Insert(0,'MSERV>> '+FResult);
end;
procedure TForm1.ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
begin
form1.Memo1.Lines.Insert(0,'IWR>> '+HTTP_POST+FContent);
Socket.SendText(HTTP_POST+FContent);
end;
end.
Заранее благодарю -
alekseyi © (26.02.10 10:54) [1]вот сама форма:
<form action="wwv_flow.accept" method="post" name="wwv_flow" id="wwvFlowForm" >
<input type="hidden" name="p_flow_id" value="119" id="pFlowId" /> <input type="hidden" name="p_flow_step_id" value="101" id="pFlowStepId" /> <input type="hidden" name="p_instance" value="4362601671021144" id="pInstance" /> <input type="hidden" name="p_page_submission_id" value="2591075" id="pPageSubmissionId" /> <input type="hidden" name="p_request" value="" id="pRequest" /><table width="100%"><tr>
<td style="padding:0; width=100%; text-align:right"></td></tr></table>
<table border="0" summary="" align="center" style="margin:100px auto;">
<tr>
<td><table summary="" cellpadding="0" cellspacing="0" border="0" class="t3RegionwithoutButtonsandTitles" id="R332326989462457958">
<tr>
<td class="t3Body"><table width="100%" border=0><tr><td align="center" valign="center"><center><img src="wwv_flow_file_mgr.get_file?p_security_group_id=822518234669031&p_flow_id=11 9&p_fname=logo.gif" border=0></center></td></tr></table></td>
</tr>
</table>
<table class="formlayout" summary="" ><tr><td align="right"><a class="t3optionalwithhelp" href="javascript:popupFieldHelp('325219607430380413','4362601671021144')" tabindex="999">User Name</a></td>
<td colspan="2" rowspan="1" align="left"><input type="hidden" name="p_arg_names" value="325219607430380413" /><input type="text" name="p_t01" size="40" maxlength="100" value="" id="P101_USERNAME" /></td></tr><tr><td align="right"><a class="t3optionalwithhelp" href="javascript:popupFieldHelp('325219682021380416','4362601671021144')" tabindex="999">Password</a></td>
<td colspan="1" rowspan="1" align="left"><input type="hidden" name="p_arg_names" value="325219682021380416" /><INPUT TYPE="password" NAME="p_t02" SIZE="40" MAXLENGTH="100" onkeypress="return submitEnter(this,event)" id="P101_PASSWORD" >
</td><td align="left"></td>
<td colspan="1" rowspan="1" align="left"><table style="display:inline;margin-left:6px;" cellpadding="0" cellspacing="0" border="0" summary=""><tr>
<td style="width:9px;"><a href="javascript:doSubmit('LOGIN');"><img src="/i/themes/theme_3/button_left2.gif" border="0" height="25" width="11" alt=""/></a></td>
<td class="t3ButtonHtmlMiddle" nowrap="nowrap"><a href="javascript:doSubmit('LOGIN');" class="t3ButtonHtmlMiddle">Login</a></td>
<td style="width:9px;"><a href="javascript:doSubmit('LOGIN');"><img src="/i/themes/theme_3/button_right2.gif" border="0" height="25" width="11" alt=""/></a></td>
</tr></table></td></tr>
</table>
</td>
</tr>
</table>
<input type="hidden" name="p_md5_checksum" value="" /></form> -
alekseyi © (26.02.10 10:48)
'p_flow_id="119"'+#13#10+
'p_flow_step_id="101"'+#13#10+
разделитель #13#10 сам придумал? может &
alekseyi © (26.02.10 10:48)
'Content-Length: '+IntToStr(Length(FContent))+#13#10+#13#10+
FContent;
надо дважды интер -
Anatoly Podgoretsky © (26.02.10 11:57) [3]> Slym (26.02.2010 11:46:02) [2]
Как думаешь, что значит #13#10+#13#10 -
Anatoly Podgoretsky © (26.02.10 11:57) [3]
фторой я допесал... оригинал:
alekseyi © (26.02.10 10:48)
FContent:=
'Content-Length: '+IntToStr(Length(FContent))+#13#10+
FContent; -
alekseyi © (26.02.10 12:40) [5]с & тоже ничего не получается
-
alekseyi © (26.02.10 12:43) [6]Я пробывал и через & и через /r/n
-
Anatoly Podgoretsky © (26.02.10 13:10) [7]
> Я пробывал и через & и через /r/n
Это ты прочто, случайно не про СИ ли? -
alekseyi © (26.02.10 12:43) [6]
1. зачем гадать? снифером посмотреть слабо что клиент шлет? (в заменитель снифера подойдет тотже netview в режиме портмап с отображением передаваемых данных)...
2. добейся хотябы не HTTP/1.1 400 Bad Request упростив
FContent:='a=b'; после этого будеш уверен что заголовки правильно уходят
3. потом мути с FContent - там мало разделитель... нужно чтоб данные были x-www-form-urlencoded (касаеца кирилицы и спецсимволов) -
alekseyi © (26.02.10 13:18) [9]
> Это ты прочто, случайно не про СИ ли?
Нет не про С, Delphi ковыряю -
alekseyi © (26.02.10 13:22) [10]Спасибо за внимание к моей теме
Просто раньше небыло нужды в работе с запросами
Внимательно слежу за этой темой -
Anatoly Podgoretsky © (26.02.10 13:34) [11]> Slym (26.02.2010 13:15:08) [8]
FContent не относится к URL, там надо в соответсвии с дирактивами Content... -
alekseyi © (26.02.10 13:36) [12]
> FContent не относится к URL, там надо в соответсвии с дирактивами
> Content...
все input-ы с валуями через & -
alekseyi © (26.02.10 13:37) [13]name="Aleksey"&mail="mymail@mail.ru" и т. п.
-
alekseyi © (26.02.10 14:03) [14]
> HTTP_POST := 'POST http: //'+WebServer+PostAddr+
> ' HTTP/1.0'+#13#10;
Вот тут вопрос! между http: и // убрал пробелы
HTTP/1.1 400 Bad Request - а нет, и вообще никакого ответа от сервера нету -
Anatoly Podgoretsky © (26.02.10 14:19) [15]> alekseyi (26.02.2010 13:36:12) [12]
К "input-там" у меня претензий не было, только к Content, там наиболее актуально utf-8 -
AlekseyI © (26.02.10 14:54) [16]Исправил на HTTP/1.1 теперь сервер отвечает HTTP/1.1 200 OK
-
AlekseyI © (27.02.10 07:09) [17]Я немного переписал программу
теперь сервер отвечает и по моему жалуется на печеньки, что не так?
вот ответ сервера:
HTTP/1.1 200 OK
Date: Sat, 27 Feb 2010 16:54:42 GMT
Server: Oracle-Application-Server-10g/10.1.2.0.0 Oracle-HTTP-Server
Content-Length: 464
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=WINDOWS-1251
<div class="ErrorPageMessage">Expecting p_company or wwv_flow_company cookie to contain security group id of application owner.</div><table summary=""><tr><td><img src="/i/error.gif" border="0" /></td>
<td>Error</td>
<td>ERR-7621 Could not determine workspace for application (:) on application accept.
</td></tr>
<tr><td><a href="javascript:window.history.go(-1)">OK</a></td>
<td><br /></td></tr></table>
<script type="text/javascript">
<!--
//-->
</script>
а вот исходник программы:
unit postU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
WebServer = 'xxxxxx';
WebPort = 7780;
PostAddr = '/pls/htmldb/wwv_flow.accept';
HTTP_Data =
'Content-Type: application/x-www-form-urlencoded'+#13#10+
'Host: xxx'+#13#10+
'Referer: http://xxx:7780/pls/htmldb/f?p=119:70:452025081117386::NO:::'+#13#10+
'Cookie: income=1'+#13#10+
'from: mymail@mail.ru'+#13#10+
'User-Agent: IE'+#13#10+
'Accept-Charset: windows-1251'+#13#10+
//'Referer: http://xxx/pls/htmldb/wwv_flow.accept'+#13#10+
'Keep-Alive: 115'+#13#10+
'Connection: Keep-Alive'+#13#10#13#10;
var
Form1: TForm1;
FContent:string;
FResult:string;
HTTP_POST : string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
FContent:=
'p_flow_id="119"&'+
'p_flow_step_id="101"&'+
'p_instance="329311196309813"&'+
'p_page_submission_id="2561758"&'+
'p_request=""&'+
'p_arg_names="325219607430380413"&'+
'p_t01="xxx"&'+
'p_arg_names="325219682021380416"&'+
'p_t02="xxx"&'+
'p_md5_checksum=""';
FContent:=
'Content-Length: '+IntToStr(Length(FContent))+#13#10#13#10+
'Content:'+#13#10+
FContent;
HTTP_POST := 'POST http://'+WebServer+PostAddr+
' HTTP/1.0'+#13#10;
form1.ClientSocket1.Host:=webserver;
form1.ClientSocket1.Port:=webport;
HTTP_Post := HTTP_Post + HTTP_Data;
form1.ClientSocket1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.ClientSocket1.Socket.SendText(form1.edit1.Text);
form1.Memo1.Lines.Insert(0,'>>> '+form1.edit1.Text);
end;
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
Fresult:=Fresult+socket.ReceiveText;
form1.Memo1.Lines.Insert(0,FResult);
form1.Memo1.Lines.Insert(0,'MSERV>>');
form1.Memo1.Lines.Insert(0,'_______________________________');
end;
procedure TForm1.ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
begin
form1.Memo1.lines.insert(0,HTTP_POST);
form1.Memo1.Lines.Insert(0,'IWR>> ');
form1.Memo1.Lines.Insert(0,'_______________________________');
Socket.SendText(HTTP_POST);
end;
end. -
имя(06.11.11 22:20) [18]Удалено модератором -
имя(06.11.11 22:21) [19]Удалено модератором