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

Вниз

Работа с сокетами   Найти похожие ветки 

 
Vilux   (2003-10-10 14:25) [0]

ПОмогите, пожалуйста, мастера, разобраться. Проблема ниже...
Использую кусок кода :

// Формирование url
Buf:="GET http://www.mail.ru HTTP/1.0";
// Отправка данных
send(sock2,Buf[1],length(Buf),0);//отправка вроде происходит
// Получение 300 байт
setlength(Buf,300);
x:=recv(sock2,Buf[1],300,0);<<<-------------дальше этой строчки прога не хочет работать...не выдает никакой ошибки, ничего...видно не может получить ответ от сервера...
if x<300 then
exit;

Полный код следующий...
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, WinSock;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

// Описание процесса
type
TScan = class(TThread)
sock2: TSocket;
addr: TSockAddrIn;
WSAData: TWSAData;
private
procedure CSGet;
protected
procedure Execute; override;
end;

var
Form1: TForm1;
Sock : TScan;
Rez : boolean = false;

const
// Адрес прокси.
HTTPserv = "proxy.xl.ru";

implementation

// Для преобразование имени
type
TaPInAddr = array [0..255] of PInAddr;
PaPInAddr = ^TaPInAddr;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
end;

// Запуск / Остановка
procedure TForm1.Button1Click(Sender: TObject);
var
J0 : Integer;
begin
if Rez then
begin
Rez:=false;
try
Sock.Terminate;
except
end;
end
else
begin
Application.ProcessMessages;
Rez:=true;
Sock:=TScan.Create(false);
end;
end;

// Инициализация процесса
procedure TScan.Execute;
var
iaddr, x0 : Integer;
ph : PHostEnt;
pptr : PaPInAddr;
InAddr : TInAddr;
begin
try
// Инициализация сокета
WSAStartUp(257, WSAData);
sock2:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if sock2=INVALID_SOCKET then
begin
try
closesocket(sock2);
except
end;

try
Terminate;
except
end;
exit;
end;
// Получение адреса
iaddr := inet_addr(HTTPserv);
if iaddr <=0 then
begin
// Если имя, а не IP
ph := gethostbyname(HTTPserv);
if ph = nil then
begin
try
closesocket(sock2);
except
end;

try
Terminate;
except
end;
exit;
end;
pptr := PaPInAddr(ph^.h_addr_list);
x0 := 0;
while pptr^[x0] <> nil do
begin
InAddr:= pptr^[x0]^;
inc(x0);
addr.sin_addr:=inaddr;
addr.sin_family := AF_INET;
// Порт прокси - 80, 3128, 80808 и т.п.
addr.sin_port := htons(80);
if (connect(sock2, addr, sizeof(addr))) = 0 then
break
end;
end
else
begin
// Если IP
addr.sin_addr.S_addr:=iaddr;
addr.sin_family := AF_INET;
// Порт прокси - 80, 3128, 80808 и т.п.
addr.sin_port := htons(80);
addr.sin_family := AF_INET;
if (connect(sock2, addr, sizeof(addr))) > 0 then
begin
try
closesocket(sock2);
except
end;

try
Terminate;
except
end;
exit;
end;
end;
// Запуск цикла
while true do
begin
CSGet;
if (not Rez) then
break;
end;
except
end;
try
Terminate;
except
end;
Form1.Button1.Caption:="Start";
Rez:=false;
Application.ProcessMessages;
end;

procedure TScan.CSGet;
var
x : Integer;
Buf : string;
begin
Application.ProcessMessages;
try
// Формирование url
Buf:="GET http://www.mail.ru HTTP/1.0";
// Отправка данных
send(sock2,Buf[1],length(Buf),0);
// Получение 300 байт
setlength(Buf,300);
x:=recv(sock2,Buf[1],300,0);
if x<300 then
exit;
setlength(Buf,300);
// Если нужный ответ
if pos("check",Buf)>0 then
begin
Rez:=false;
Application.MessageBox("Нужный ответ получен","Information");
exit;
end;
except
end;
end;

end.


 
Reindeer Moss Eater   (2003-10-10 14:28) [1]

Заголовок HTTP должен оканчиваться двумя CRLN


 
Reindeer Moss Eater   (2003-10-10 14:28) [2]

заголовок HTTP запроса


 
Vilux   (2003-10-10 17:34) [3]

Спасибо, это помогло, но тепер другая проблема... как мне отправить запрос в несколько строк, чтобы там передавались данные формы, допустим кусок ниже... пробую засунуть его в строку, и отправить, но приходит ответ

HTTP/1.1 400 Bad Request
Via: 1.0 MXCTZDC01
Content-Type: text/html; charset=iso-8859-1
Date: Fri, 10 Oct 2003 13:32:56 GMT
Server: Apache/1.3.27 (Unix) mod_ssl/2.8.12 OpenSSL/0.9.6g PHP/4.2.3 rus/PL30.16

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY>
<H1>Bad Request</H1>
Your browser sent a request that this server could not understand.<P>
Request header field is missing colon separator.<P>
<PRE>
application/x-shockwave-flash, */*</PRE>
<P>
<HR>
<ADDRESS>Apache/1.3.27 Server at www6.hotbox.ru Port 80</ADDRESS>
</BODY></HTML>

А это кусок, который я отправляю...и который засовываю в строку..

POST http://www.mail333.com/login.php HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://www.mail333.com/
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: www.mail333.com
Content-Length: 87
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=xxx.xxx.xxx.xxx.780241065792236323; hotlog=1
reason=login&lng=ru&user=user&domain=mail333.com&pass=pass&serid=0&rememb=nothing


 
Reindeer Moss Eater   (2003-10-10 17:39) [4]

как мне отправить запрос в несколько строк

Точно так же. И в конце две CRLN


 
Vilux   (2003-10-10 18:04) [5]

Да уже разобрался... вот нашел...

the reason is simply...after the header you must send two CrLf! :D
so HEADER & vbCrLf & vbCrLf & POST DATA

it works :P
и еще

The value of the Content-Length header field must be equal to lenght of the entity.


 
Ketmar   (2003-10-10 19:09) [6]

мда. тяжело изобретать то, о чём уже написано в стандартах, правда?



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

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

Наверх





Память: 0.47 MB
Время: 0.004 c
3-11587
M126
2003-11-16 09:28
2003.12.04
Запрос на данные из мемополя


8-11615
Малой
2003-08-06 14:51
2003.12.04
как из буфура сохранить jpeg?


6-11661
veresk
2003-10-11 01:17
2003.12.04
не работает logonuser


6-11638
TOL-123
2003-10-11 14:27
2003.12.04
id процесса


6-11669
UltraFreak
2003-10-07 14:58
2003.12.04
Куда коннектиться?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский