Задать вопрос
@forttran

Curl заменяет все символы «+» на пробелы в тексте переменных при передаче методом POST. В чем может быть причина?

Итак, решил сделать небольшой агрегатор контента с выводом красивого графика на svg, но не суть.
Сайт с которого хочу взять контент использует защиту в виде генерирования ключей в hide полях, ее почти обошел. Проверяю запросы в wireshark. Скрин один:
83867359185a42d0be934f3024d7b6fd.png
Как видите на сервер уходят переменные с пробелами, однако в curl я отправляю текст с символами "+"
e1c339fafc2f4e89a783b6a4c0150fea.png
Собственно вопрос сводится к тому, почему curl заменяет все символы "+" пробелами и как от этого избавиться?
#!/bin/bash
curl   --dump-header /home/forttran/work/cookie1.txt `
`     -H "User-Agent: w3m/0.5.3+debian-15" `
`     -H "Accept: text/html, text/*;q=0.5, image/*, application/*, video/*, audio/*, message/*, x-content/*, inode/*, x-scheme-handler/*, misc/*"`
`     -H "Accept-Language: ru;q=1.0,en;q=0.5"`
`     -H "Host: www.moex.com"`
` http://www.moex.com/ru/derivatives/open-positions.aspx >index.html;
#echo $headers_and_cookies
viewstate=$(cat index.html|sed -n 's/.*<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="\(.*\)" \/>.*/\1/p')
echo $viewstate
viewstategenerator=$(cat index.html|sed -n 's/.*<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="\(.*\)" \/>.*/\1/p')
#echo $viewstategenerator
eventvalidation=$(cat index.html|sed -n 's/.*<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="\(.*\)" \/>.*/\1/p')
#echo $eventvalidation
curl `
`   --dump-header /home/forttran/work/cookie2.txt ` 
` 	--trace-ascii /home/forttran/work/trace.txt `
`	  -d "__VIEWSTATE=$viewstate&__VIEWSTATEGENERATOR=$viewstategenerator&__EVENTVALIDATION=$eventvalidation&ctl00\$PageContent\$frmInstrumList=ALRS_F&ctl00\$PageContent\$frmDateTime\$CDateDay=12&ctl00\$PageContent\$frmDateTime\$CDateMonth=6&ctl00\$PageContent\$frmDateTime\$CDateYear=2017&ctl00\$PageContent\$frmButtom=Показать"`  
`   -H "User-Agent: w3m/0.5.3+debian-15" `
`   -H "Accept: text/html, text/*;q=0.5, image/*, application/*, video/*, audio/*, message/*, x-content/*, inode/*, x-scheme-handler/*, misc/*"`
`   -H "Accept-Encoding: gzip, compress, bzip, bzip2, deflate" `
`   -H "Accept-Language: ru;q=1.0,en;q=0.5"`
`   -H "Host: www.moex.com" `
`   -H "Referer: http://www.moex.com/ru/derivatives/open-positions.aspx" `
`   -H "Content-type: application/x-www-form-urlencoded" `
`	http://www.moex.com/ru/derivatives/open-positions.aspx >result.html


Что любопытно, браузер w3m c идентичными заголовками выдирает то, что мне надо.
Собственно что еще раз доказывает, что проблема кроется именно в парсинге символа "+"

Всем спасибо. Уже разобрались. Нужно было в баш скрипте еще раз пройтись седом и заменить все + на %2B
  • Вопрос задан
  • 705 просмотров
Подписаться 3 Оценить 3 комментария
Решения вопроса 1
toxa82
@toxa82
Можно попробовать указать флаг --data-urlencode "text=${message}"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
18 дек. 2024, в 12:39
1000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект
18 дек. 2024, в 12:22
5000 руб./за проект