2016-03-23 6 views
0

Pythonリクエストを使用する際に問題があります。 Pythonがヘッダーを正しく設定しないように要求します。

fields={ 
    "fields":{ 
     "field1":{"test": "test"}, 
     "field2": "test", 
     "field3":{"test": "test"} 
    } 
} 

try: 
    results = requests.post(
     "http://www.fakenotrealatall.com", 
     data=json.dumps(fields), 
     headers={"content-type": "application/json"} 
    ) 

    print results.headers['content-type'] 

    return stuff 

私はそれを実行

が、私は415エラーを取得し、print文は、コンテンツタイプが「text/htmlの;のcharset = UTF-8」であることを示しています。ここに私のコードです。

「application/json」に設定されていないのはなぜですか?

+0

を私はあなたのようなコードを使用してきましたし、それは今も働いています。しかし私の実装では '' Content-Type ': "application/json; encoding =' utf-8 '" ''が使われています。それを試して、違いがあるかどうかを確認してください。 –

+0

まだショットはありません。 – typedino

+0

リクエストで設定したヘッダーにあるものではなく、HTTPレスポンスからコンテンツタイプを印刷しています。したがって、あなたが印刷しているコンテンツタイプは、 '' http:// www.fakenotrealatall.com''を '' text/html; charset = utf-8''のように設定します。 –

答えて

1

"http://www.fakenotrealatall.com"のサーバーが415エラーを返したため、415エラーが発生しました。 the HTTP standardによれば、それはリクエストのエンティティは、要求されたメソッドのために要求されたリソースによってサポートされていない形式であるため、サーバーは要求のサービスを拒否している

を意味します。

どうやら、www.fakenotrealatall.comの人々は、JSONが好きではありません。

results.headers['content-type']の値は「text/html」です。なぜなら、これもまたサーバーが返すものです。これは返されたデータのタイプで、ではなく、送信したデータのタイプであることを覚えておいてください。これを確認するには、試してみてください。要求は、JSONの種類がありますが、応答がHTMLであるか

print results.headers['content-type'] 
print results.request.headers['content-type'] 

は注意してください。最後に

http://httpbin.orgのように、JSONを受け入れることをサイトに投稿してみてください、これはすべて動作するようになっている方法を参照するには:

import requests 
import json 

fields={ 
    "fields":{ 
     "field1":{"test": "test"}, 
     "field2": "test", 
     "field3":{"test": "test"} 
    } 
} 

results = requests.post(
     "http://httpbin.org/post", 
     data=json.dumps(fields), 
     headers={"content-type": "application/json"} 
    ) 

print results.status_code, results.reason 
print results.headers['content-type'] 
print results.request.headers['content-type'] 
関連する問題