13

この小さな赤ちゃん:

import urllib2
import simplejson as json

opener = urllib2.build_opener()
opener.addheaders.append(('Content-Type', 'application/json'))
response = opener.open('http://localhost:8000',json.dumps({'a': 'b'}))

次のリクエストを生成します (ngrep で見られるように):

sudo ngrep -q -d lo '^POST .* localhost:8000'

T 127.0.0.1:51668 -> 127.0.0.1:8000 [AP]
  POST / HTTP/1.1..Accept-Encoding: identity..Content-Length: 10..Host: localhost:8000..Content-Type: application/x-www-form-urlencoded..Connection: close..User-Agent:
   Python-urllib/2.7....{"a": "b"} 

私はそれを望んでいませんContent-Type: application/x-www-form-urlencoded。欲しいとはっきり言ってる('Content-Type', 'application/json')

何が起きてる?!

4

4 に答える 4

16

カスタム ヘッダーを設定する場合は、Requestオブジェクトを使用する必要があります。

import urllib2
import simplejson as json

opener = urllib2.build_opener()
req = urllib2.Request('http://localhost:8000', data=json.dumps({'a': 'b'}),
      headers={'Content-Type': 'application/json'})
response = opener.open(req)
于 2012-12-17T19:03:36.117 に答える
2

私は同じものに見舞われ、この小さな宝石を思いつきました:

import urllib2
import simplejson as json

class ChangeTypeProcessor(BaseHandler):
    def http_request(self, req):
        req.unredirected_hdrs["Content-type"] = "application/json"
        return req

opener = urllib2.build_opener()
self.opener.add_handler(ChangeTypeProcessor())
response = opener.open('http://localhost:8000',json.dumps({'a': 'b'}))

OpenerDirector以前に追加したヘッダーを置き換える HTTP 要求のハンドラーを追加するだけです。

于 2016-08-31T11:55:56.423 に答える