Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> cURL, url и escape 
V
    Опции темы
bars80080
Дата 10.11.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



сама задача:
хочу передать в cURL методом пост некоторые данные, 

Код

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url); // set url to post to  
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);  
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable  
        curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s  
        curl_setopt($ch, CURLOPT_POST, 1); // set POST method  
        curl_setopt($ch, CURLOPT_POSTFIELDS, $param); // add POST fields  
        $result = curl_exec($ch); // run the whole process  
        curl_close($ch);

где $param = 'XML=<tag><tag1>....</tag>';

сам по себе cURL работает, проверено, однако, в моём сервисе нет. с другой стороны сервис отвечает, если послать те же данные из формы. то есть в action формы пишется $url, а в поле с именем XML вводится текст строки.

прежде чем долбать владельца сервиса, хочется разобраться с пульками на моей стороне. в строке возможны всякие непотребные символы (пробелы, знаки & и прочее), поэтому может быть строка рассыпается.
когда я кодирую rawurlencode/urlencode значение переменной XML, то получаю что-то вроде
XML=%3Ctag%3E%0A%09%3Ctag1%...
и с подобной строкой всё равно не работает. 
хотя, в случае когда отсылка данных производится формой, я в файерфоксе смотрю заголовки передаваемых данных, то вижу, что кодирование было более мягким:
XML=<tag>+<tag1>....</tag>
то есть заменены были всего лишь некоторые символы

есть ли в пхп аналогичный вид url-кодирования?
PM MAIL WWW   Вверх
skyboy
Дата 10.11.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(bars80080 @  10.11.2010,  10:37 Найти цитируемый пост)
я в файерфоксе смотрю заголовки передаваемых данных

нет-нет-нет. firebug вполне может(подчеркиваю - не обязан, но может - наверняка я не знаю) для удобочитаемости делать url_decode. 
если хочешь смотреть/изучать передаваемое, пропиши в  action формы свой сервер. и посмотри, какие заголовки принимает сервер(естевенно, куки переданы не будут, но, как я понимаю, вопрос не о них; или все же дело в куках?)
PM MAIL   Вверх
bars80080
Дата 10.11.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



не, куки не причём, там чисто общение сервер-сервер идёт


хорошо, посмотрим, что там творится
PM MAIL WWW   Вверх
enoff
Дата 10.11.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



bars80080, дело может быть не в пост данных, зачастую сервер из-за отсутствия некоторых заголовков может препятстовать.
отправляемые заголовки можно посмотреть так:
Код

curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
print_r(curl_getinfo($ch, CURLINFO_HEADER_OUT));


можно просто повторять отправляемые заголовки браузером.
Обычно проблемы с:
Код

Connection: keep-alive
Keep-Alive: 115
User-Agent:
Referer:

Как отправляется форма: multipart/form-data (в CURL_POSTFIELDS передан массив вида array("var" => "value") или application/x-www-form-urlencoded (строкой "var=value")
В первом случае curl добавляет заголовок Expect: 100, лечится
Код

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));


Мало ли что поможет...

Это сообщение отредактировал(а) enoff - 10.11.2010, 14:30
PM MAIL ICQ Skype GTalk   Вверх
bars80080
Дата 10.11.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ок, посмотрим
PM MAIL WWW   Вверх
bars80080
Дата 12.11.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



в общем, проблема была примерно такой, какого-то заголовка не хватало

курл слал так:
Код

POST / HTTP/1.1
Host: somehost
Accept: */*
Content-Length: 1393
Content-Type: application/x-www-form-urlencoded


а браузер так:
Код

Host: somehost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1059 Safari/532.5
Referer: http://somehost/
Content-Length: 1161
Cache-Control: max-age=0
Origin: http://somehost
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3
Cookie: PHPSESSID=qwerqerqwrwrqwrqwerqwer


докинул такие заголовки

Код
        $headers = array(
            'Connection: keep-alive',
            'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1059 Safari/532.5',
            'Cache-Control: max-age=0',
            'Content-Type: application/x-www-form-urlencoded',
            'Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
            'Accept-Encoding: gzip,deflate,sdch',
            'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
            'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3',
            'Expect:'
        );

        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

всё заработало

Это сообщение отредактировал(а) bars80080 - 12.11.2010, 13:53
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.