Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2012, 18:54   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
Вопрос WinSock. Щтправка POSt/GET запроса. Не отправляет.

Доброго времени суток!

В DLL нужно высылать http запрос, вязать туда synapse или, того хуже, indy - не имеет смысла. Полез в сокеты.

Написал:

Код:
function HostToIP(const sHostName: string): string;
var
  wsdata: TWSAData;
  HostName: array [0 .. 255] of AnsiChar;
  hostEnt: PHostEnt;
  addr: PAnsiChar;
begin
  WSAStartup($0101, wsdata);
  try
    GetHostName(HostName, sizeof(HostName));
    StrPCopy(HostName, sHostName);
    hostEnt := GetHostByName(HostName);
    if Assigned(hostEnt) then
      if Assigned(hostEnt^.h_addr_list) then
      begin
        addr := hostEnt^.h_addr_list^;
        if Assigned(addr) then
        begin
          Result := IntToStr(Byte(addr[0])) + '.' + IntToStr(Byte(addr[1])) +
            '.' + IntToStr(Byte(addr[2])) + '.' + IntToStr(Byte(addr[3]));
        end;
      end;
  finally
    WSACleanup;
  end;
end;

procedure SendURL(const AsPOST: Boolean);
var
  wsInfo: TWSAData;
  hSock: NativeUInt;
  sIn: TSockAddr;
  sBuff: array of char;
  sBuffStr: string;
begin
  WSAStartup($0101, wsInfo);
  try
    hSock := socket(AF_INET, SOCK_STREAM, 0);
    sIn.sin_family := AF_INET;
    sIn.sin_port := htons(80);
    sIn.sin_addr.S_addr := inet_addr(PAnsiChar(HostToIP('localhost')));
    connect(hSock, sIn, sizeof(sIn));
    if AsPOST then
      sBuffStr := 'POST /'
    else
      sBuffStr := 'GET /';

    sBuffStr := sBuffStr + 'stats.php?dgdfgdgfdfgd' + ' HTTP/1.1' + #10#13 +
      'User-agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.02'
      + #10#13 + 'Host: ' + 'localhost' + #13#10 + #13#10;
    SetLength(sBuff, Length(sBuffStr));
    CopyMemory(@sBuff, @sBuffStr, Length(sBuffStr));
    send(hSock, sBuff, Length(sBuff), 0);
  finally
    closesocket(hSock);
    WSACleanup;
  end;
end;
Функции и методы рабочие, однако:
1. на веб-сервер ничего не приходит
2. Вылетает Access Violation непонятно где.


Где я ошибся?
Благодарю за внимание.
Человек_Борща вне форума Ответить с цитированием
Старый 02.11.2012, 22:09   #2
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
непонятно где
Начиная с этого безобразия

CopyMemory(@sBuff, @sBuffStr

и далее по тексту везде где фигурирует sBuff
xoodoo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формирование POST-запроса Aleksandr_59 Работа с сетью в Delphi 1 10.08.2012 14:46
Отправка файла на HTTP сервер POST запросом на WinSock Vladimirok Работа с сетью в Delphi 2 14.04.2012 06:26
Перехват Post/Get запросов в WebBrowser которые отправляет Flash ZekaUa Работа с сетью в Delphi 2 19.11.2011 23:28
Winsock отправка get запроса eldar Работа с сетью в Delphi 0 08.04.2009 16:19
Отправка POST запроса S@fer Работа с сетью в Delphi 0 29.01.2009 13:33