![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Męczę się od wczoraj z wysłaniem odpowiednio sformatowanego zapytania przy pomocy Pythona. Obsługa XML-RPC to jakaś kpina, tak więc spróbowałem PyCURL oraz HTTLib, doszłem troszkę dalej ale jednak wciąż niewystarczająco daleko. Do rzeczy, potrzebuję wysłać takie zapytanie: Kod POST /dupa HTTP/1.0 User-Agent: XML-RPC for PHP 3.0.0.beta Host: webnull.kablownia.org:81 Accept-Charset: UTF-8,ISO-8859-1,US-ASCII Content-Type: text/xml Content-Length: 325 <?xml version="1.0"?> <methodCall> <methodName>LogIn</methodName> <params><param> <value><string></string></value> </param> <param> <value><string></string></value> </param> <param> <value><string></string></value> </param> <param> <value><string>OS Test User Agent</string></value> </param></params> </methodCall> Najlepiej przy pomocy jakiejś biblioteki a nie na raw socketach (program ma działać bez uprawnień roota). Gdzie tu jest mój problem? Otóż za nic nie mogę wysłać zapytania sformatowanego w ten sposób, a konkretnie samego kodu XML. Kod XML udało mi się wysłać metodą uploadu, ale serwer tego nie rozumie - potrzebuję wysłać tak jak jest na tym przykładowym schemacie. Przykład który podałem jest wygenerowany przy pomocy PHP - zesniffowałem go Wiresharkiem wysyłając zapytanie z debuggera do komputera którego używam (sniffer na moim komputerze w celu przechwycenia poprawnego schematu). Proszę o pomoc, jestem bardzo chętny do przyznania "Pomógł" za Twoją pomoc : -) -- WebNuLL Ten post edytował Babcia@Stefa 8.05.2011, 15:04:53 -------------------- Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 92 Dołączył: 6.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Trochę źle trafiłeś(aś), tutaj to php.
![]() Radzę czasami użyc google - http://www.python.rk.edu.pl/w/p/pycurl-i-zadania-http/ |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że to forum od PHP ale można tu także napisać temat odnośnie Pythona bo wiem, że wielu ludzi tutaj także zna Pythona.
Mogę założyć się, że jest tu dużo użytkowników Linuksa i Pythona. Niestety ale ten przykład nie podaje mi jak wysłać dokładnie takie zapytanie. Ten przykład przedstawia upload który będzie wyglądać mniej wiecej tak: Kod POST / HTTP 1.1 Content-length: długość Nagłówek: wartość Content-type: typ mime -- boundary blablabla treść -- end of boundary A ja potrzebuję czegoś takiego: Kod POST / HTTP 1.1 Content-length: długość Nagłówek: wartość Content-type: typ mime treść PHP potrafi coś takiego wysłać, Python na pewno też potrafi dlatego pytam się jak i zwracam o pomoc ponieważ sam już do tego nie mam sił. @edit Zesniffowałem ten przykład który podałeś i wygląda mniej więcej tak: Kod POST /test HTTP/1.1 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Host: localhost Accept: */* Content-Length: 564 Expect: 100-continue Content-Type: multipart/form-data; boundary=----------------------------a830acfa532c tutaj treść xmla Ja nie mogę wysłać do serwera multipart/form-data, ja muszę wysłać w jednym pakiecie text/xml, to po tak komplikować. @edit Oto rozwiązanie, jakoś do niego doszedłem: Kod XMLData = """<?xml version="1.0"?> <methodCall> <methodName>LogIn</methodName> <params><param> <value><string></string></value> </param> <param> <value><string></string></value> </param> <param> <value><string></string></value> </param> <param> <value><string>"""+userAgent+"""</string></value> </param></params> </methodCall>""" sendHeaders = { 'Content-Length': str(len(XMLData)), 'User-Agent': userAgent, 'Content-Type': 'text/xml', 'Accept-Charset': 'UTF-8,ISO-8859-1,US-ASCII' } conn = httplib.HTTPConnection('api.opensubtitles.org') conn.request("POST", "/xml-rpc", XMLData, sendHeaders) response = conn.getresponse() data = response.read() print data -- WebNuLL Ten post edytował Babcia@Stefa 8.05.2011, 16:26:55 -------------------- Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 15:42 |