PDA

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


frxmaster
28.01.2010, 18:24
При разработке программы столкнулись с такой проблемой:

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

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

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

GlooK
28.01.2010, 22:41
При разработке программы столкнулись с такой проблемой:

Когда в пост-запросе передаётся ссылка такого вида:
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
При разработке программы столкнулись с такой проблемой:

Когда в пост-запросе передаётся ссылка такого вида:
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
через 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 - не редиректит

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


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