2016-07-20 12 views
0

Ich muss eine Anforderung für den Zugriff auf die XML-Dienste erstellen, sollte es über ein HTTP verarbeitet werden. Ass sagt in der Dokumentation muss ich "4 zugehörige Parameter senden und diese Parameter werden als Identifikation arbeiten und werden die Anfrage stellen". Diese Parameter sollten wie Strings aussehen:Erstellen von XML-Anforderung mit urllib2

"codes=12345" 
"user=user12345" 
"password=pass12345" 
"partner=part12345" 

Laut Dokumentation ich habe zwei Systeme für die XML-Datei der Anfrage zu senden:

1 durch eine URL codiert im MIME-Format application/x-www-form- urlencoded: URL ("urlfile")

2 Durch Eingabe der Daten direkt in eine Variable, codiert im MIME-Format application/x-www-form-urlencoded: Direkt in einer Variablen ("xml").

Nach diesen meinen Anforderungsdaten wie folgt aussieht:

data=' 
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <!DOCTYPE petition SYSTEM "http://xml.example.com/xml/dtd/xml.dtd"> 
    <petition> 
     <number>Country request</number> 
     <partner>Company</partner> 
     <type>5</type> 
    </petition>' 

ich diese Anforderung mit Python-Bibliothek urllib2 erstellen. So, hier ist mein Code:

request = urllib2.Request(url, data) 
request.add_header("codes=12345", "user=user12345", "password=pass12345", "partner=part12345") 

Aber ich habe einen Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: add_header() takes exactly 3 arguments (5 given) 

Also änderte ich Header dazu:

header = {'codes':'12345','user':'user12345','password':'pass12345','partner':'part12345'} 

Und so nach, dass, wie mein Code sieht :

request = urllib2.Request(url, data, header) 
response_xml = urllib2.urlopen(request) 
response = response_xml.read() 
print(response) 

Aber ich bekam Antwort suc h wenn ich nicht Benutzer authentifiziert habe. Was mache ich falsch? Danke!

+0

BTW, haben Sie versucht, mit 'https' statt' http' in der URL? –

+0

Nein, habe ich nicht. Ich benutze die gleiche URL wie in der Dokumentation –

Antwort

1

Try this:

from urllib import urlencode 
from urllib2 import urlopen 

args = {'codes':'12345','user':'user12345','password':'pass12345','partner':'part12345'} 
conn = urlopen(url,urlencode(args)) 
data = conn.read() 
conn.close() 
print(data) 
+0

Vielen Dank für Ihre Antwort, ich habe versucht, wie Sie zu tun. Und jetzt habe ich einen anderen Fehler vom Server. "Identifizierung ist inkrekt". Aber ich weiß nicht warum. Alle Daten kopieren und einfügen aus der Dokumentation. kann ich 'args' hinzufügen, nicht wie Dictionary, aber wie Strings? Vielen Dank. –

+0

@ZagorodniyOlexiy: 'http: //whatever.com? Codes = 12345 & user = user12345 & password = pass12345 & partner = part12345'. Aber seien Sie sich bewusst, dass Sie Sonderzeichen wie Leerzeichen usw. codieren müssen (es gibt keine davon in Ihrem aktuellen Beispiel, nur für den Fall, dass Sie sich entscheiden, sie zu ändern) ... –