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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2017, 22:16   #1
The Rimmidlav
 
Регистрация: 28.03.2013
Сообщений: 6
По умолчанию Не выполняються запросы

Привет Всем. Использую компиляторы XE3, XE7 и старый добрый Borland Delphi 7. Все компиляторы стоят на разных компьютерах. Но не суть.

Столкнулся с такой проблемой. Прошу взглянуть на код.

Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.IniFiles, Winapi.ShellAPI ,ssl_openssl, httpsend;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
     function Pars(T_, ForS, _T: string): string;
  end;

   type
  TMyThread = class(TThread)
  private
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;
  Potok: TMyThread;
  HTTP: THTTPSend; // Синапс
  response: TStringList; // Ответ сервера
  PostLink: string;
  Token: string;
  G: string;

implementation

{$R *.dfm}

// Функция парсинга

function TForm1.Pars(T_, ForS, _T: string): string;
  var a, b:integer;
    begin
      Result := '';
        if (T_='') or (ForS='') or (_T='') then Exit;
          a:=Pos(T_, ForS);
            if a=0 then Exit else a:=a+Length(T_);
              ForS:=Copy(ForS, a, Length(ForS)-a+1);
                b:=Pos(_T, ForS);
                  if b>0 then
                    Result:=Copy(ForS, 1, b - 1);
    end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Potok:=TMyThread.Create(False);
Potok.Priority:=tpNormal;
Potok.FreeOnTerminate:=True;
Potok.Resume;
end;


{ TMyThread }

procedure TMyThread.Execute;
begin
HTTP:=THTTPSend.Create;
response:=TStringList.Create;
Token:='03845094859044847485748574857484758459430930485743589437';
G:='Привет Мир!';
PostLink:='50208426_358';

HTTP.HTTPMethod('GET','https://api.vk.com/method/wall.getposts=-'+PostLink+'&access_token='+Token+'&v=5.62');
HTTP.Clear;
HTTP.Headers.Clear;
HTTP.Document.Clear;
HTTP.Cookies.Clear;


HTTP.HTTPMethod('GET','https://api.vk.com/method/wall.post?&message='+ G +'&access_token='+token+'&v=5.62');


end;

end.

Суть проблемы : При запуске программы и отправке запроса с пустой переменной "G" проходят оба запроса. НО если в переменной есть одно слово то как ни странно оба запроса тоже проходят....А вот уже если в переменной два три и т.д слова то первій запрос проходит, а уже второй НЕТ. Почему єто происходит. Уже три дня бьюсь с этим. В чем же проблема то????
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.

Последний раз редактировалось Alex11223; 08.03.2017 в 23:21.
The Rimmidlav вне форума Ответить с цитированием
Старый 08.03.2017, 22:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Пробел на %20 замените
p51x вне форума Ответить с цитированием
Старый 08.03.2017, 23:03   #3
The Rimmidlav
 
Регистрация: 28.03.2013
Сообщений: 6
По умолчанию

Заработало! А почему так происходит? Почему нельзя просто пробел? Допустим мне нужно спарсить текст в эту переменную (а там естественно будут пробелы) как тогда поступить?
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
The Rimmidlav вне форума Ответить с цитированием
Старый 08.03.2017, 23:12   #4
The Rimmidlav
 
Регистрация: 28.03.2013
Сообщений: 6
По умолчанию

и текст приходит в таком формате "?4??4??4??4??4??1? ?4??4??1?!"
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
The Rimmidlav вне форума Ответить с цитированием
Старый 08.03.2017, 23:25   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от The Rimmidlav Посмотреть сообщение
А почему так происходит? Почему нельзя просто пробел?
Потому что так устроен протокол HTTP.

https://tools.ietf.org/html/rfc7230
https://www.ietf.org/rfc/rfc3986.txt
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 08.03.2017 в 23:28.
Alex11223 вне форума Ответить с цитированием
Старый 08.03.2017, 23:29   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Потому что https://www.w3schools.com/tags/ref_urlencode.asp

В новых версиях есть: HTTPEncode и REST.Utils.URIEncode
Для старых надо писать велосипед типа https://marc.durdin.net/2012/07/indy...code-and-more/ или брать готовое
p51x вне форума Ответить с цитированием
Старый 08.03.2017, 23:35   #7
The Rimmidlav
 
Регистрация: 28.03.2013
Сообщений: 6
По умолчанию

Спасибо за ответ. Ознакомился. Полезно.
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
The Rimmidlav вне форума Ответить с цитированием
Старый 08.03.2017, 23:36   #8
The Rimmidlav
 
Регистрация: 28.03.2013
Сообщений: 6
По умолчанию

Спасибо большое за решение проблемы. Просто еще не сталкивался с отправкой текста напрямую в url.
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
The Rimmidlav вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запросы и запросы с помощью QBE LollyMarry Microsoft Office Access 0 02.03.2014 01:14
Запросы Эмилия*)) SQL, базы данных 1 04.06.2013 19:20
Запросы к бд. Predator199 PHP 10 26.08.2012 17:04
не могу понять почему при закрытии формы не выполняються действия описанные в formclose? maloy_ya Общие вопросы Delphi 9 21.01.2011 05:42
С++. Запросы в БД morindos Помощь студентам 1 24.06.2010 11:42