libcurl HTTPS POST-Daten senden?

9

Ich habe eine Anwendung, die Daten über HTTP-POST-Anfragen empfangen hat. Ich versuche mit libcurl eine Anfrage an diese App zu senden, die Daten zu senden und die Antwort von der App zu erhalten. Dies ist der Code, den ich bisher habe:

%Vor%

Dies verbindet sich im Wesentlichen mit dem Server, ich bekomme ein OK auf dem curl_easy_perform() . Ich kann die Verbindung auf Wireshark sehen.

Zwei Fragen:

1) Ist dies die richtige Methode zum Senden von Daten über einen POST und
? 2) Wie bekomme ich die Antwort von der Anwendung.

Ich dachte, ich brauche curl_easy_recv() , aber ich kann nicht sehen, wie. Jeder Beispielcode ist willkommen. Danke.

    
Mr Aleph 21.10.2011, 14:17
quelle

2 Antworten

4

Ich denke, Sie sollten auch überlegen, einen Handler für die Antwortheader hinzuzufügen:

%Vor%

Wenn es sich um einen Webdienst handelt, der für die Verwendung durch eine Anwendung vorgesehen ist, kann es sich bei der Antwort um eine Nur-Header-Antwort ohne Antwortdaten handeln. Der Header würde Daten enthalten wie:

%Vor%

Wo die Hauptsache ist, nach der Sie suchen, ist der Code 200 , der besagt, dass die Anfrage in Ordnung war.

Die Funktionen zum Behandeln der Daten aus Header oder Antwort sollten ein void * haben, und Sie müssen es null-terminieren, wenn Sie es als Zeichenfolge verwenden. Zur Info gehe ich so mit den eingehenden Daten um (in diesem Fall verwende ich nur den Rückgabecode in meiner Anwendung - der Antworttext geht einfach in eine Protokolldatei):

%Vor%

Fehlerbehandlung wurde aus Platzgründen entfernt!

    
asc99c 21.10.2011, 18:15
quelle
1

Sie müssen keine Empfangsfunktion aufrufen. Die empfangene Antwort kommt zu Ihnen zurück, wenn die Steuerung zum write-finished Callback übergeht. Richten Sie diesen Rückruf so ein:

curl_res = curl_easy_setopt (handle, CURLOPT_WRITEFUNCTION, RecvResponseCallback);

vor dem Aufruf von perform.

Definieren Sie den Rückruf wie folgt:

%Vor%

Auf die Antwortdaten wird durch die Daten arg ( nicht ) das Argument ptr hingewiesen, das Sie sich genauer ansehen sollten wenn du das funktionierst).

Wenn Sie RecvResponseCallback beenden, stellen Sie sicher, dass (size_t) size * nmemb

zurückgegeben wird     
Pete Wilson 21.10.2011 14:27
quelle

Tags und Links