2010-11-04 14 views
0

Je me demande si quelqu'un a une expérience de publication de fichiers image avec CURL en C ..?CURLOPT_POSTFIELDS CURL poster le fichier image, langage C

Je vous écris un programme pour poster un facebook Type de service web, et tout va bien, sauf quand je tente de poster des fichiers d'image ...

Il y a un format spécial que les besoins du serveur ou il pas accepter le poste ...

quelque chose comme ceci:

--- webformkitXXXXXXXX \ r \ n nom de fichier "somefile.jpg" \ r \ n

FICHIER JPEG ou d'une image (en binaire)

--- webformkitXXXXXXXX \ r \ n FIN ----

Alors, quand je suis enfin en mesure de memcpy à rassembler les différentes pièces dont j'ai besoin, je peux l'enregistrer dans un fichier, et il semble juste bien, mais je peux voir à partir des captures de paquets, que CURL n'aime pas prendre le binaire, il semble qu'il tronque le tampon au premier signe d'un '\ 0' car, il envoie seulement 300 octets, quand il devrait envoyer 80K ...

J'ai utilisé ceci: curl_easy_setopt (curl, CURLOPT_POSTFIELDS, data);

Merci!

Répondre

0

Vous devez utiliser CURLOPT_WRITEDATA et brancher une fonction que vous avez écrite pour écrire les données POST.

+0

"Vous devez utiliser CURLOPT_WRITEDATA et brancher une fonction que vous avez écrite pour écrire les données POST." Êtes-vous sûr...? Selon la documentation curl ... "Pointeur de données pour passer à la fonction d'écriture de fichier" – chinasailor

+0

Jusqu'à présent, selon les captures de paquets, le plus proche était "CURLOPT_POSTFIELDS" mais comme je l'ai mentionné, il envoie seulement des données jusqu'à ce qu'il frappe certains binaire, puis craps out .... Juts FYI, j'ai essayé "CURLOPT_WRITEDATA", d'abord en écrivant un rappel, pour qu'il lise les données de mon tampon, puis en passant un tampon de données directement et finalement "CURLOPT_READFUNCTION" qui ressemble ce que vous vouliez dire ... "Cette fonction est appelée par libcurl dès qu'elle a besoin de lire des données pour l'envoyer au pair" (ce que j'essaie de faire, envoyer un tampon de publication à un pair) ... Quoi qu'il en soit, merci ... – chinasailor

+0

Cela ressemble à ce dont j'ai besoin .... "CURLOPT_POSTFIELDSIZE" Si vous voulez publier des données sur le serveur sans laisser libcurl faire un strlen() pour mesurer la taille des données, cette op tion doit être utilisée. Lorsque cette option est utilisée, vous pouvez publier des données entièrement binaires, ce qui risque d'échouer. Si cette taille est définie sur -1, la bibliothèque utilisera strlen() pour obtenir la taille. – chinasailor