2017-07-13 3 views
0

J'utilise urllib2 pour créer une requête HTTP, j'ai besoin de définir Content-Type: application/json dans l'en-tête, mais cela ne semble pas fonctionnerDéfinition de Content-Type/application/json dans l'en-tête

request = urllib2.Request(url, data='\"type\":\"chain\",\"data\":null') 
request.add_header("Authorization", "Basic %s" % creds) 
request.add_header("Content-Type", "application/json") 
request.add_header("Accept", "application/json") 
print "Data: %s" % request.get_data() 
print "Accept: %s" % request.get_header("Accept") 
print "Content-Type: %s" % request.get_header("Content-Type") 
print "Authorization: %s" % request.get_header("Authorization") 

Les résultats sont les suivants:

données: "type": "chaîne", "data": null

Accept: application/JSON

Content-Type: Aucun

Autorisation: U1lTQ1RMOmFiYzEyMw de base ==

Comme vous pouvez le voir, même si je paramètre "Type de contenu", son coming back "Aucun".

Toute aide serait appréciée

Répondre

0

C'est en raison d'une incohérence dans les accesseurs d'en-tête urllib2.Request - à savoir add_header() auto-capitalise votre tête lors de l'enregistrement, mais get_header() ne pas faire la même chose lors de la récupération, donc si vous ne:

print "Content-Type: %s" % request.get_header("Content-type") 

ou

print "Content-Type: %s" % request.get_header("Content-Type".capitalize()) 

tout devrait bien se présenter. Les en-têtes, d'après toutes les spécifications HTTP, devraient être considérés comme insensibles à la casse, malheureusement, la plupart des bibliothèques HTTP ne respectent pas ce fait.

0

J'ai été capable de déterminer que la méthode add_header() n'a pas aimé que "Type" soit mis en majuscule, en le changeant en request.add_header ("Content-type", "application/json") a résolu le problème.