Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Python] Jak wysłać zapytanie tego typu?
Babcia@Stefa
post
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
Go to the top of the page
+Quote Post
mat-bi
post
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. smile.gif

Radzę czasami użyc google - http://www.python.rk.edu.pl/w/p/pycurl-i-zadania-http/
Go to the top of the page
+Quote Post
Babcia@Stefa
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:42