J'ai un programme pour envoyer une requête POST à un serveur.
J'utilise cURL pour envoyer une requête.
Mon programme fonctionne sous Windows et Linux (en ce moment Ubuntu 9.10).cURL - connexion socket "suspendue" sous Linux
Lorsque le serveur reçoit le demande le traiter et renvoie le code d'erreur (0000 si aucune erreur) et la description de l'erreur (le cas échéant).
Le serveur Web du serveur est Microsoft IIS. Lorsque j'exécute mon programme sous Windows, cela fonctionne bien.
Mais quand j'exécute le programme sous Linux, il raccroche pendant 30 secondes (timeout de cURL) et renvoie une erreur "L'opération a expiré après 30000 millisecondes avec 5 octets reçus".
Comme je connais le problème côté serveur - le serveur n'envoie pas la taille de la réponse et ne ferme pas la connexion de socket.
journaux de Flexion (de Linux):
11:00:09.544 Process() curl: libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.15
11:00:09.941 DebugCallback() About to connect() to sms1.redoxygen.net port 80 (#0)
11:00:09.941 DebugCallback() Trying 203.145.62.146...
11:00:10.084 DebugCallback() Connected to sms1.redoxygen.net (203.145.62.146) port 80 (#0)
11:00:10.085 DebugCallback() POST /sms.dll?private&type=26 HTTP/1.1
Host: sms1.redoxygen.net
Content-Length: 244
11:00:10.086 DebugCallback() [244 bytes of DATA]
11:00:10.087 ReadCallback() No more data to send
11:00:10.292 WriteCallback() HTTP/1.1 200 OK
11:00:10.293 DebugCallback() Content-Type: text/html
11:00:10.294 DebugCallback() no chunk, no close, no size. Assume close to signal end
11:00:10.294 WriteCallback()
11:00:10.466 DebugCallback() 0000
11:00:40.500 DebugCallback() Operation timed out after 30000 milliseconds with 5 bytes received
11:00:40.501 DebugCallback() Closing connection #0
Sur les journaux Windows sont presque les mêmes, mais sans délai - il prise immédiatement après près reciving "0000".
Je peux analyser les données reçues et fermer la connexion si j'obtiens "0000", mais c'est un "bidouillage".
Des idées?
Vous n'avez pas mentionné pourquoi vous devez supporter une réponse HTTP illégale comme celle-ci? Pourquoi ne pas simplement réparer le serveur pour renvoyer une réponse valide? – EricLaw
@EricLaw -MSFT: Bon point, mais je ne peux pas changer l'implémentation du serveur. Je ne comprends pas POURQUOI cela fonctionne bien chez Windows. Peut être ISS envoyer des informations supplémentaires? – Dmitriy
La même chose se produit-elle lorsque vous exécutez la requête via telnet/netcat? – jdizzle