2010-02-06 14 views
30

क्यूटी 4.6.1 का उपयोग कर कुछ यूआरएल एन्कोडेड पैरामीटर के साथ मैं HTTP POST अनुरोध कैसे बना सकता हूं?मैं क्यूटी 4.6.1 के साथ एक HTTP POST अनुरोध कैसे बना सकता हूं?

मुझे लगा कि मैं एक QNetworkRequest बना सकता हूं, वहां सभी पैरामीटर सेट कर सकता हूं और इसे QNetworkAccessManagers पोस्ट विधि के माध्यम से भेज सकता हूं। लेकिन मैं अनुरोध में कुछ यूआरएल-एन्कोडेड पैरामीटर कैसे जोड़ सकता हूं?

अंत में मैं क्यूटी/सी ++ का उपयोग कर Eve API तक पहुंच बनाना चाहता हूं। एक अजगर उदाहरण यहां पाया जा सकता: http://www.eveonline.com/api/doc/example-python.asp


मैं इसे कामयाब तरह (अभी भी पुनर्संशोधित और उपयोगी कुछ में गठित की जानी है) कुछ का उपयोग कर:

QNetworkReply *requestApi(QNetworkAccessManager &nwam) 
{ 

    QNetworkRequest request(QUrl("http://api.eve-online.com/account/Characters.xml.aspx")); 
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded"); 

    QByteArray data; 
    QUrl params; 

    params.addQueryItem("userid","user"); 
    params.addQueryItem("apiKey","key"); 
    data.append(params.toString()); 
    data.remove(0,1); 

    QNetworkReply *reply = nwam.post(request,data); 
    return reply; 
} 
+0

[QUrl :: addEncodedQueryItem()] (http://doc.trolltech.com/4.6/qurl.html#addEncodedQueryItem)? मैं स्वयं क्यूटी का उपयोग कर रहा हूं, लेकिन HTTP भागों का उपयोग नहीं कर रहा हूं ... अभी तक। – Macke

+0

आपके उपयोग के मामले में QNetworkAccessManager ओवरकिल जैसा लगता है। क्यों libcurl का उपयोग नहीं करते? – Paladin

उत्तर

6

मुझे माफ करना कि मैं केवल लगता है देर से आपका पोस्ट। हालांकि, अगर कोई जवाब के लिए खोज कर रहा है, तो भी मैं मदद करने की कोशिश करूंगा।

दुर्घटना से, मैं एक ईवी एपीआई एप्लिकेशन पर भी काम कर रहा हूं, और मैंने भी वैसे ही कोशिश की। दुर्भाग्यवश, QNetworkManager इस तरह से काम नहीं करता है, क्योंकि यह अनुरोध को असंकालिक रूप से पोस्ट करता है। आपको स्लॉट को finished(QNetworkReply*) सिग्नल से कनेक्ट करना होगा।

मैं, EveConnector नामक एक अलग वर्ग के साथ एक अनुरोध करने QNetworkManager के finished संकेत से जुड़ा स्लॉट में जबाब प्रसंस्करण, और उसके बाद कनेक्टर वर्ग के अपने संकेतों के माध्यम से अनुरोध कर रहा वस्तु वापस फोन करके करते हैं।

यदि आप पूछें तो मैं खुशी से कोड साझा करूंगा।

11

आपका समाधान लगभग सही है। लेकिन एक का उपयोग करना चाहिए:

data = params.encodedQuery(); 

बजाय

data.append(params.toString()); 
data.remove(0,1); 

UTF8 तार ठीक से संभाल।

संबंधित मुद्दे