2010-12-09 54 views
1

Je dois supprimer le dernier saut de ligne d'un webrequest http pour pouvoir communiquer avec un service json-rpc. La requête générée par .net ressemble à ceci.Suppression d'un saut de ligne de l'en-tête d'une requête Web C#

POST http://localhost.:8332/ HTTP/1.1 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.1) 
Authorization: Basic dGlwa2c6dGlwa2c= 
Host: localhost.:8332 
Content-Length: 42 
Expect: 100-continue 
Connection: Keep-Alive 

{"id":1,"method":"getinfo","params":[]} 

Ce que je besoin ne serait-ce (remarquez l'alimentation de ligne manquante après la dernière valeur d'en-tête et le début de la teneur en JSON):

POST http://localhost.:8332/ HTTP/1.1 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.1) 
Authorization: Basic dGlwa2c6dGlwa2c= 
Host: localhost.:8332 
Content-Length: 42 
Expect: 100-continue 
Connection: Keep-Alive 
{"id":1,"method":"getinfo","params":[]} 

Je ne peux pas trouver quelque chose où je pouvais manipuler l'en-tête qui est réellement envoyé au service.

Voir http://www.bitcoin.org/smf/index.php?topic=2170.0 pour plus d'information sur le problème ...

+2

Si le service a besoin de la requête comme votre deuxième exemple, il n'est pas valide HTTP. HTTP nécessite une ligne vide séparant les en-têtes du corps (le cas échéant). –

+0

Avez-vous testé cela et avez vérifié qu'il fonctionne sans le retour à la ligne? Pour tester ceci, vous pouvez utiliser telnet (lancez telnet hostname 80, puis passé dans votre requête depuis un éditeur de texte). Je n'ai jamais entendu parler d'un serveur web qui se souciait de \ r \ n ou de \ n, donc j'espère que cela ne fera aucune différence. Si c'est le cas, vous pouvez utiliser la classe NetworkStream pour savoir exactement quels caractères vous envoyez. –

+0

En outre, votre requête HTTP semble invalide car elle devrait juste avoir un chemin après le verbe POST, au lieu d'une URL complète (c'est-à-dire/au lieu de http://localhost.:8332/). Mais peut-être que juste un violoniste. –

Répondre

1

finalement résolu mon problème (de base). le problème avec ma communication avec le service rpc, était que je n'avais pas défini de type de contenu. Le service nécessitait un type de contenu "application/json-rpc" pour fonctionner correctement.

+0

Heureux que vous l'ayez compris. Cela ressemblait à un bug vraiment bizarre et frustrant. –