Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отправка POST запроса TSocket, приходит пустой ответ 
:(
    Опции темы
Norfonzor
Дата 15.12.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Необходимо отправить POST запрос(используя TSocket. С idHTTP разобрался там все  работает) к index.php, и получить ответ.
Не могу разобраться с этим TSocket, после нажатия приходит пустой ответ.
код:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Winsock, Sockets;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Button1: TButton;
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  R:string;

implementation

{$R *.dfm}


procedure TForm1.RadioButton1Click(Sender: TObject);
begin
if RadioButton1.Checked then R:='1';
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
if RadioButton2.Checked then R:='2';
end;


procedure TForm1.Button1Click(Sender: TObject);
var symb:char;
    st:string;
    SockAddr:TSockAddr;
    con: TSocket;
    otvet: array[1..1024] of char;
    WData: TWSAData;
    k:integer;
    post_data,post_st:string;
    buf: array[1..1024] of Char;

begin
  if WSAStartup(MAKEWORD(2,2),WData)<>0 then
    begin
      ShowMessage('Ошибка инициализации WinSock');
      close;
    end;
  con:=Socket(AF_INET,SOCK_STREAM,0);
  if con=INVALID_SOCKET then
    begin
      ShowMessage('Ошибка сокета');
      close;
    end;
  SockAddr.sin_addr.S_addr := Inet_addr(PChar('127.0.0.1'));
  SockAddr.sin_family := AF_INET;
  SockAddr.sin_port := HtoNS(80);
  if Connect(con,SockAddr,SizeOf(SockAddr))<>0 then
    begin
      ShowMessage('Ошибка подключения '+IntToStr(WSAGetLastError));
      close;
    end;

post_data:=
'SAVEURL=&click2=1&R='+R+
'&a1='+edit1.Text+
'&a2='+edit2.Text+
'&a3='+edit3.Text+
'&a4='+edit4.Text+
'&a5='+edit5.Text+
'&a6='+edit6.Text+
'&a7='+edit7.Text+
'&a8='+edit8.Text+
'&a9='+edit9.Text+
'&a10='+edit10.Text;

post_st:=
'POST index.php HTTP/1.1'+#13+
'Host: 127.0.0.1'+#13+
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7'+#13+
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'+#13+
'Accept-Language: ru,en-us;q=0.7,en;q=0.3'+#13+
'Accept-Encoding: gzip,deflate'+#13+
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'+#13+
'Keep-Alive: 300'+#13+
'Connection: keep-alive'+#13+
'Referer: http://localhost/kurs/index.php'+#13+
'Cookie: testcookie=1'+#13+
'+Content-Type: application/x-www-form-urlencoded'+#13+
'Content-Length: '+inttostr(length(post_data))+#13+
post_data;


post_st:=post_st+#13#10+#13#10;

  if Send(con,post_st,Length(post_st),0)=SOCKET_ERROR then
    begin
      ShowMessage('Ошибка сокета '+IntToStr(WSAGetLastError));
      close;
    end else
    begin
     recv(con,buf,SizeOf(buf),0);
     showmessage('отправка ок');
    end;

  st:='';
  for k:=1 to SizeOf(buf) do
    begin
    st:=st+buf[k];
    end;

    memo1.Text:=utf8toansi(st);

  if CloseSocket(con)<>0 then
    begin
      ShowMessage('Невозможно закрыть сокет');
      close;
    end;
end;

end.



примерный код POST запроса:
Код

POST /index.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; 
rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
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/kurs/index.php
Cookie: testcookie=1
Content-Type: application/x-www-form-urlencoded
Content-Length: 73

SAVEURL=&click2=1&R=1&a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=7&a8=8&a9=9&a10=10



Передаю:
click2=1, R=1, a1=1, a2=2, a3=3, a4=4, a5=5, a6=6, a7=7, a8=8, a9=9, a10=10

Это сообщение отредактировал(а) Norfonzor - 15.12.2010, 15:07
PM MAIL   Вверх
Ryhor
Дата 15.12.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.12.2010

Репутация: нет
Всего: нет



Зачем тебе Tsocket?
PM MAIL   Вверх
Norfonzor
Дата 15.12.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



препод по сетям, не хочет видеть Indy, тупой как лось. Я вообще не работал с Tsocket. Код сделал но не понимаю почему он пустой ответ мне шлет. Мб у кого есть пример работы POST с Tsocket??
PM MAIL   Вверх
Ryhor
Дата 15.12.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.12.2010

Репутация: нет
Всего: нет



Так тебе надо Синапс!
PM MAIL   Вверх
Norfonzor
Дата 16.12.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



помогите пожалуйста!
PM MAIL   Вверх
kami
Дата 17.12.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



send Function
If no error occurs, send returns the total number of bytes sent, which can be less than the number requested to be sent in the len parameter. 
Источник:MSDN
Почему сделан анализ только для SOCKET_ERROR?
Срочно посмотреть, может данные отправлены не все, соответственно сервер просто ждет продолжения.
И - где анализ результата recv?
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.