Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi] Проблема с символом "&" в post-запросе (https://forum.antichat.xyz/showthread.php?t=174204)

frxmaster 28.01.2010 18:24

[Delphi] Проблема с символом "&" в post-запросе
 
При разработке программы столкнулись с такой проблемой:

Когда в пост-запросе передаётся ссылка такого вида:
http://mysite.ru/go?id=1775497&ssid=gyurtnrutk&midd=gfgfg

символ & распознается как дополнительный параметр в пост запросе и все что после него отправляется отдельно

есть ли какой-то метод корректно передать ссылку?

GlooK 28.01.2010 22:41

Цитата:

Сообщение от frxmaster
При разработке программы столкнулись с такой проблемой:

Когда в пост-запросе передаётся ссылка такого вида:
http://mysite.ru/go?id=1775497&ssid=gyurtnrutk&midd=gfgfg

символ & распознается как дополнительный параметр в пост запросе и все что после него отправляется отдельно

есть ли какой-то метод корректно передать ссылку?

Да ладно?

Чем отправляешь? Если на винсоках, то запрос будет выглядить так:
Код:

POST /go?id=1775497&ssid=gyurtnrutk&midd=gfgfg HTTP/1.1
Host: mysite.ru
....
....
....
postvalue1=postkey1&postvalue2=postkey2


Algol 28.01.2010 23:36

Цитата:

Сообщение от frxmaster
При разработке программы столкнулись с такой проблемой:

Когда в пост-запросе передаётся ссылка такого вида:
http://mysite.ru/go?id=1775497&ssid=gyurtnrutk&midd=gfgfg

символ & распознается как дополнительный параметр в пост запросе и все что после него отправляется отдельно

есть ли какой-то метод корректно передать ссылку?

Значения параметров POST запроса должны передаваться в URL кодировке. А в ней символ амперсанда заменяется на %26

bmp152 29.01.2010 01:22

Цитата:

Чем отправляешь?
через idhttp
Код:

var
  http_client : tidhttp;
  params : :tstringlist;
  message : string;
begin
  message := 'http://domen.ru/12345&6789';
  params.add('Message=' + message);
  http_client.Post('URL', params);
end;

При этом постятся 2 параметра:
Код:

Message=http://domen.ru/12345
6789=

Хотя должно быть так:
Код:

Message=http://domen.ru/12345&6789
Пробовали функцию TIdURI.URLEncode, не помогло
Цитата:

Значения параметров POST запроса должны передаваться в URL кодировке. А в ней символ амперсанда заменяется на %26
Попробовал руками заменить, проходит нормально но ссылка уже получается битой почемуто

TRX.new 29.01.2010 01:24

Цитата:

Сообщение от bmp152
через idhttp
Код:

var
  http_client : tidhttp;
  params : :tstringlist;
  message : string;
begin
  message := 'http://domen.ru/12345&6789';
  params.add('Message=' + message);
  http_client.Post('URL', params);
end;

При этом постятся 2 параметра:
Код:

Message=http://domen.ru/12345
6789=

Хотя должно быть так:
Код:

Message=http://domen.ru/12345&6789
Пробовали функцию TIdURI.URLEncode, не помогло

Попробовал руками заменить, проходит нормально но ссылка уже получается битой почемуто

поставь перед & знак ^ .. может быть поможет...

bmp152 29.01.2010 01:36

Цитата:

поставь перед & знак ^ .. может быть поможет...
Не помогает, тоже самое - все что после & постится как другой параметр

GlooK 29.01.2010 02:13

Цитата:

Попробовал руками заменить, проходит нормально но ссылка уже получается битой почемуто
Что значит битой!?
Приведи реальный пример, на реальном сайте.

narik_ 29.01.2010 02:16

Ты через компоненту шлеш запрос ? если да то там есть опция передавать знак как знак и ли его аски код.

bmp152 29.01.2010 03:39

Цитата:

Что значит битой!? Приведи реальный пример, на реальном сайте.
Например http://tinyurl.com/62cvp&random - норм редиректит
http://tinyurl.com/62cvp%26random - не редиректит

Цитата:

Ты через компоненту шлеш запрос ? если да то там есть опция передавать знак как знак и ли его аски код.
Да, нашел, спасиб.


Всем спасибо, решили проблему


Время: 23:25