Всем привет, очень нужна помощь по pycurl'у. Есть простой код на пайкурле, который посылает пост запрос. На страницу, которая выводит этот пост запрос ( Денвер на локальном компе). Код php страницы, которая выводит пост запрос test_curl.php Code: <? print_r($_POST); ?> И есть код на питоне, который отсылает на нее пост запрос main.py Code: import StringIO import pycurl def GetPage( curl, url ): resp = StringIO.StringIO() curl.setopt(pycurl.WRITEFUNCTION, resp.write) curl.setopt(pycurl.URL, url ) curl.perform() the_page = resp.getvalue() resp.close() return the_page def Test(): curl = pycurl.Curl() aaa = 'SomeParam' # NOT WORK curl.setopt(pycurl.POSTFIELDS, r'params%5BsloganText%5D=...because+open+source+matters¶ms%5Bja_screen_width%5D=97¶ms%5Btheme_header%5D=green¶ms%5Btheme_background%5D=lighter¶ms%5Btheme_elements%5D=black¶ms%5BrightCollapsible%5D=1¶ms%5BrightCollapseDefault%5D=show¶ms%5BexcludeModules%5D=38&'+aaa+r'=1') with open('pycurl_not_work.html','w') as f: f.write( GetPage( curl, r'http://localhost/test_curl.php' ) ) # WORK ddd = 'params%5BsloganText%5D=...because+open+source+matters¶ms%5Bja_screen_width%5D=97¶ms%5Btheme_header%5D=green¶ms%5Btheme_background%5D=lighter¶ms%5Btheme_elements%5D=black¶ms%5BrightCollapsible%5D=1¶ms%5BrightCollapseDefault%5D=show¶ms%5BexcludeModules%5D=38&'+aaa+'=1' curl.setopt(pycurl.POSTFIELDS, ddd) with open('pycurl_work.html','w') as f: f.write( GetPage( curl, r'http://localhost/test_curl.php' ) ) if __name__=='__main__': Test() То есть отличие лишь в передаче параметра pycurl.POSTFIELDS В итоге в pycurl_work.html Code: Array ( [params] => Array ( [sloganText] => ...because open source matters [ja_screen_width] => 97 [theme_header] => green [theme_background] => lighter [theme_elements] => black [rightCollapsible] => 1 [rightCollapseDefault] => show [excludeModules] => 38 ) [SomeParam] => 1 ) а в pycurl_not_work.html информация каждый раз разная, иногда попадает из заголовка, иногда просто портится кодировка, вообщем мистика какая-то. Один из вариантов pycurl_not_work.html Code: Array ( [l_php] => ...because open source matters [params] => Array ( [ja_screen_width] => 97 [theme_header] => green [theme_background] => lighter [theme_elements] => black [rightCollapsible] => 1 ) [params_rightCollapseDefauДVцЧю] => 38 [SomeParam] => 1 ) Подскажите с чем это может быть связано??? P.S. скорее всего дело в параметрах в виде массива
Girerro к сожалению, не могу воспроизвести вашу проблему данным скриптом. Python 2.6.5, pycurl.version = 'libcurl/7.21.0 OpenSSL/1.0.0a zlib/1.2.5' Попробуйте разнести скрипты по разным хостам и посмотреть с помощью WireShark что передается. Это позволит вам определить источник проблемы - скрипт ли это, или кривая настройка денвера
Gifts спасибо за совет библиотека libcurl/7.20.1 OpenSSL/0.9.8o zlib/1.2.5 на всякий случай попробую обновить Перенес пхп скрипт на хостинг, результат тот же. Установил WireShark Нашел нужные пакеты, отличаются только у TCP части порт источник а в секции Line-based text data: application/x-www-form-urlencoded где идет непосредственно пост запрос у неисправного (первого запроса) строка Code: [truncated] url.php\000BsloganText%5D=...because¶ms%5Btheme_header%5D=green¶ms%5Btheme_background%5D=lighter¶ms%5Btheme_elements%5D=black¶ms%5BrightCollapsible%5D=1¶ms%5BrightCollapseDefault%5D=show¶ms%5BexcludeModu HEX Code: ..L...l.I.u@..E...N.@.........`....|.P....K..VP.......POST /test_curl.php HTTP/1.1..User-Agent: PycURL/7.19.7..Host: HOSTNAME..Accept: */*..Content-Length: 245..Content-Type: application/x-www-form-urlencoded....url.php.BsloganText%5D=...because¶ms%5Btheme_header%5D=green¶ms%5Btheme_background%5D=lighter¶ms%5Btheme_elements%5D=black¶ms%5BrightCollapsible%5D=1¶ms%5BrightCollapseDefault%5D=show¶ms%5BexcludeModules%5D=38&SomeParam=. у исправного Code: [truncated] params%5BsloganText%5D=...because¶ms%5Btheme_header%5D=green¶ms%5Btheme_background%5D=lighter¶ms%5Btheme_elements%5D=black¶ms%5BrightCollapsible%5D=1¶ms%5BrightCollapseDefault%5D=show¶ms%5BexcludeModules HEX Code: ..L...l.I.u@..E...N.@.........`....~.P.f..LY..P.......POST /test_curl.php HTTP/1.1..User-Agent: PycURL/7.19.7..Host: HOSTNAME..Accept: */*..Content-Length: 245..Content-Type: application/x-www-form-urlencoded....params%5BsloganText%5D=...because¶ms%5Btheme_header%5D=green¶ms%5Btheme_background%5D=lighter¶ms%5Btheme_elements%5D=black¶ms%5BrightCollapsible%5D=1¶ms%5BrightCollapseDefault%5D=show¶ms%5BexcludeModules%5D=38&SomeParam=1 То есть по всей видимости на стороне питона что-то не так происходит. Так что я по прежнему в тупике, в скрипте то все нормально вроде P.S. на офицальной странице pycurl http://pycurl.sourceforge.net/ версия 7.19, где можно найти 7.21 в виде бинарника ?
Girerro качал вроде отсюда: http://code.google.com/p/urllib4/downloads/list Проверьте исходник на опечатки (например вместо плюса что-то другое), проверьте исходный код в другом редакторе (был случай, когда один редактор вместо перезаписи всего файла обновлял только его начало)
ничего не помогло, мне кажется это проблемы именно pycurl. на твоей библиотеки pycurl ошибка так же сохраняется.
Еще одно дополнение, данная проблема обнаружена на Windows 7 64bit На WinXP 32 все работает нормально